Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将vkCode和扫描代码转换为有意义的字符_C_Windows_Winapi - Fatal编程技术网

将vkCode和扫描代码转换为有意义的字符

将vkCode和扫描代码转换为有意义的字符,c,windows,winapi,C,Windows,Winapi,我试图根据键盘将给定的vkCode和扫描代码转换为实际字符。我试图实现的示例是将AltGr+V转换为@,将Shift+1转换为“!”等等,但基于当前的键盘布局。我设法让它暂时工作,但在一个未知的变化后,它不再工作了。以下是我目前拥有的: unsigned char btKeys[256] = {0}; GetKeyboardState(btKeys); HKL keyboardLayout = GetKeyboardLayout(0); wchar_t szBuffer[2] = {0}; i

我试图根据键盘将给定的vkCode和扫描代码转换为实际字符。我试图实现的示例是将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”)


如何让Tounicodex返回正确的值?

您使用的虚拟密钥和扫描代码可能重复?