我正在使用以下代码来获取键盘状态的 unicode 字符串:
std::wstring App::DecodeMessage(KBDLLHOOKSTRUCT* kbHook) {
// Clean up the keyboard state
for(int i=0; i<256; ++i) keyboardMap[i] = 0;
// Get the state of all the virtual keys
GetKeyboardState(keyboardMap);
// Then we get the current layout setting
HKL kbdLayout = GetKeyboardLayout(0);
// We create the buffer to receive the unicode chars
std::vector<wchar_t> buffer;
buffer.resize(257);
buffer.assign(257, L'\0');
// And finally we translate all this to an unicode char
int numberOfChars = ToUnicode(kbHook->vkCode, kbHook->scanCode, keyboardMap, &buffer[0], 256, 0);
if(numberOfChars >= -1 && numberOfChars <= 0) return std::wstring(L"");
return std::wstring(&buffer[0], numberOfChars);
}
我的键盘布局是 US-INTL,并且在没有运行应用程序的情况下,当我按下“'”(简单引号)时,在第二次击键时按下“a”,我得到了 á。但是,使用此功能,当我按下“'”(再次简单引用)时,我实际上会在我关注的任何应用程序中获得另一个单引号。此外,它似乎没有正确编码,因为它不会记录á。我一无所知,有人可以帮忙吗?