Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > GetKeyboardLayout и русский язык


Автор: Proxin 17.4.2013, 21:12
Проблема такая. Есть хук в длл, ставится на все окна системы. Пытаюсь получить введённую букву в зависимости от текущего языка (русский или английский). Но он почему-то не возвращает мне русскую раскладку. Делаю так:
Код

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. Исправил. Пользуйтесь.

Автор: Proxin 21.4.2013, 21:59
Спасибо этому форуму. Он сподвигает на самостоятельные решения - разобрался.

Автор: feodorv 22.4.2013, 06:39
Цитата(Proxin @  21.4.2013,  22:59 Найти цитируемый пост)
Спасибо этому форуму. Он сподвигает на самостоятельные решения - разобрался. 

Так, может, поделитесь? Кому-то может ещё пригодится...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)