Win32键翻译代码输出不需要的按键

时间:2013-09-24 13:32:57

标签: c++ winapi keyboard keyboard-hook

我正在使用以下代码来获取键盘状态的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”,我得到á。但是,有了这个功能,当我按“'”(再次简单的引用)时,我实际上在任何我关注的应用程序中得到另一个单引号。此外,它似乎没有正确的编码,因为它不会记录á。我很笨,任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

所以我最终把它整理成不使用ToUnicode。我最终使用了Marc-AndréMoreau创建的解决方案,可以在http://keymagic.googlecode.com/svn-history/r112/trunk/KeyMagicDll/kbdext.cpp找到,如果有人有兴趣的话。