我正在使用以下代码来获取键盘状态的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”,我得到á。但是,有了这个功能,当我按“'”(再次简单的引用)时,我实际上在任何我关注的应用程序中得到另一个单引号。此外,它似乎没有正确的编码,因为它不会记录á。我很笨,任何人都可以帮忙吗?
答案 0 :(得分:0)
所以我最终把它整理成不使用ToUnicode。我最终使用了Marc-AndréMoreau创建的解决方案,可以在http://keymagic.googlecode.com/svn-history/r112/trunk/KeyMagicDll/kbdext.cpp找到,如果有人有兴趣的话。