C ++ Win32:将扫描代码转换为Unicode字符

|| 当我在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虚拟键(使用相同的键盘布局)会给我б。     
已邀请:
我总是使用
WM_CHAR
来读取扫描代码,因为它会为您完成翻译工作并返回UTF-16中的最后一个字符。适用于所有语言,甚至需要不止一个按键来代表一个字符的语言。     

要回复问题请先登录注册