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