Проблема такая. Есть хук в длл, ставится на все окна системы. Пытаюсь получить введённую букву в зависимости от текущего языка (русский или английский). Но он почему-то не возвращает мне русскую раскладку. Делаю так:
| Код | short GetSymbolFromVK(PKBDLLHOOKSTRUCT st,BYTE ks[255]) { WORD ch; HWND cw=GetForegroundWindow(); DWORD pid=GetWindowThreadProcessId(cw,NULL); HKL hkl=GetKeyboardLayout(pid); if (ToAsciiEx(st->vkCode,st->scanCode,ks,&ch,0,hkl)) return ch; }
|
Вызываю так:
| Код | BYTE ks[255]; GetKeyboardState(ks); char a = GetSymbolFromVK(str,ks);
|
str - это PKBDLLHOOKSTRUCT. В ней все значения есть, с помощью функции выше я получаю корректные символы по английской раскладке. Как получить раскладку активного ввода? upd. Исправил. Пользуйтесь. |