将vkCode和scanCode转换为有意义的字符

时间:2017-09-03 18:49:40

标签: c windows winapi

我试图将给定的vkCode和scanCode转换为基于键盘的实际字符。我试图实现的目的是将 AltGr + V 转换为' @', Shift + 1 到'!'等,但基于当前的键盘布局。我设法让它简单地工作,但经过一次未知的改变后,它不再有效。这是我现在拥有的:

unsigned char btKeys[256] = {0};
GetKeyboardState(btKeys);
HKL keyboardLayout = GetKeyboardLayout(0);

wchar_t szBuffer[2] = {0};
if (ToUnicodeEx(vkCode, scanCode, btKeys, szBuffer, 2, 0, keyboardLayout)) {
    if (iswcntrl(szBuffer[0])) {
        sendControl(szBuffer[0]);
    } else {
        sendCharacter(szBuffer[0]);
    }
}

但由于某些原因,我只能获得与通过vkCode发送的相同的字符(例如,按 Shift + 1 仅产生' 1&# 39)

如何让ToUnicodeEx返回正确的值?

0 个答案:

没有答案