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


Автор: Niko123 15.7.2010, 20:06
Имеется функция:

Код

HKL GetLayout(){
//HWND fgwind=GetForegroundWindow();
DWORD procid=GetWindowThreadProcessId(FindWindow(0, "Безымянный - Блокнот"), NULL);
HKL kstate=GetKeyboardLayout(procid);
return kstate;
}


Имеется майн:

Код

int main(){
...

printf("%p ", GetLayout);
...
}


Проблема в том, что при любой раскладке в блокноте возвращается инглиш (0x401...). Изначальный вариант функции также возвращает только 401 в любом окне(про консоль знаю, молчу):
Код

HKL GetLayout(){
HWND fgwind=GetForegroundWindow();
DWORD procid=GetWindowThreadProcessId(fgwind, NULL);
HKL kstate=GetKeyboardLayout(procid);
return kstate;
}


Вопрос в том, как отловить раскладку клавиатуры в другом окне через GetKeyboardLayout?

P.S. Компилятор Dev-C++ 4

Автор: Dem_max 16.7.2010, 04:22
в чем собственно проблема та ?
Если быть правильным то нужно делать так и все будет работать:
Код

WORD GetLayout()
{
   HWND hWnd = FindWindow("Notepad", NULL);
   DWORD procid=GetWindowThreadProcessId(hWnd, NULL);
   HKL kstate=GetKeyboardLayout(procid);
   return LOWORD(kstate);
}

int main()
{
   printf("%02X", GetLayout());
}


если нужно перебрать все окна юзай EnumWindows()

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