0

次のコードを使用して、キーボード状態のユニコード文字列を取得しています。

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 で、アプリを実行していない状態で "'" (単純引用符) を押し、2 回目のキーストロークで "a" を押すと、á が表示されます。ただし、この機能を使用すると、「'」(単純な引用符をもう一度) を押すと、フォーカスしているアプリで実際に別の一重引用符が表示されます。また、á を記録しないため、エンコーディングが正しく行われていないようです。私は無知です、誰か助けてくれますか?

4

1 に答える 1

0

だから私は最終的にToUnicodeを使用しないように整理しました。Marc-André Moreau によって作成されたソリューションを使用することになりました。興味がある場合は、 http://keymagic.googlecode.com/svn-history/r112/trunk/KeyMagicDll/kbdext.cppで入手できます。

于 2013-09-24T18:42:18.520 に答える