【发布时间】:2018-12-12 11:43:14
【问题描述】:
我正在尝试获取各种语言的特定扫描码的键值
按以下方式输入
布局:美国英语(美国键盘)
16 - 问
17 - 西
18 - 乙
19 - 右
20 - 吨
21 - 是的
布局:法语(法语键盘)
16 - 一个
17 - Z
18 - 乙
19 - 右
20 - 吨
21 - 是的
为此,我使用以下代码:
#include "pch.h"
#include "iostream"
#include <windows.h>
using namespace std;
int main()
{
int scancode[6] = { 16,17,18,19,20,21};
int bufferLength = 10;
char buffer[10] ;
while (1)
{
int i = 0;
for (i = 0; i < 6 ; i++)
{
unsigned int extended = scancode[i] & 0xffff00;
unsigned int lParam = 0;
if (extended)
{
if (extended == 0xE11D00)
{
lParam = 0x45 << 16;
}
else
{
lParam = (0x100 | (scancode[i] & 0xff)) << 16;
}
}
else {
lParam = scancode[i] << 16;
if (scancode[i] == 0x45)
{
lParam |= (0x1 << 24);
}
}
GetKeyNameTextA(lParam, buffer, bufferLength);
printf("%s \n", buffer);
}
}
return 0;
}
此代码为我提供了本地化的键值,但如果我在运行时更改布局,键值不会更改。它们与以前一样,要获得更改的值,我必须再次运行它。任何人都可以建议我修复它吗? 还建议是否有其他方法可以实现这一目标..
【问题讨论】:
-
这段代码没有多大意义。
GetKeyNameTextA获取当前 ANSI 设置中的文本,这是一个全局设置,在没有重新启动或注销/登录的情况下无法更改。更改键盘布局将无效。解释你的目标,以及你最终要完成的目标。 -
我的最终目标是在我的应用程序中提供动态键盘布局切换,如果用户选择不同的布局,他应该获得适当的值,例如在法语布局上应该显示键 A 而不是 Q (在标准英文键盘上)。同样,我必须为 14 种不同的布局提供支持。
标签: c++ windows c++11 localization keyboard-layout