Win32 перевод кода кода выдачи нежелательных нажатий клавиш

Я использую следующий код для получения строки 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, и без запуска приложения, когда я нажимаю «‘» (простая кавычка) и при втором нажатии клавиши я нажимаю «а», я получаю á. Однако, с помощью этой функции, когда я нажимаю «» (снова простую кавычку), я фактически получаю ДРУГУЮ одинарную кавычку в любом приложении, на которое я нацелена. Кроме того, кажется, что это не дает правильную кодировку, поскольку она не будет записывать. Я не знаю, кто-нибудь может помочь?

0

Решение

Так что я наконец разобрался, чтобы не использовать ToUnicode. В итоге я использовал решение, созданное Марком-Андре Моро, которое можно найти на http://keymagic.googlecode.com/svn-history/r112/trunk/KeyMagicDll/kbdext.cpp, если кому-то интересно.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]