当我在Windows 7中切换到俄语布局并按下键盘上的; 键时,屏幕上会显示俄语字母ж。
我正在开发一个应用程序,我需要检测按键并在屏幕上绘制文本。该要求是处理所有支持的语言。这是我的代码:
// I scan the keyboard for pressed keys
for (short key = KEY_SCAN_MIN; key <= KEY_SCAN_MAX; ++key)
{
if (GetAsyncKeyState(key) & 0x8000)
{
// When I detect a pressed key, I convert the scan code into virtual key.
// The hkl is current keyboard layout parameter, which is Russian.
UINT virtualKey = MapVirtualKeyEx((UINT)key, MAPVK_VK_TO_CHAR, hkl);
// Next I get the state of the keyboard and convert the virtual key
// into Unicode letter
if (!GetKeyboardState(kbrdState))
{
continue;
}
// unicode is defined as wchar_t unicode[2];
int result = ToUnicodeEx(virtualKey, key, (BYTE*)kbrdState, unicode, 2, 0, hkl);
一切都很有效,除了俄文的几封信,我无法弄清楚原因。一个不起作用的特定字母是ж。当我尝试翻译其扫描代码时,翻译为б,这是一封不同的俄语字母。
我花了一整天的时间来调试这个问题并且不会太过分。当我按下这个俄语键时,扫描码为168,虚拟键为1078。我做了这个小测试,将字母转换回虚拟键。
short test = VkKeyScanEx(L'ж', hkl);
变量测试的值是1078!我不明白为什么将字母ж转换为虚拟键给了我1078但转换1078虚拟键(使用相同的键盘布局)给了我б。