Вообщем пример простейшей проги чекающей текущую раскладку активного онкна ниже. Только одна проблема это не работает для консольных окон. Код (Text): do{ Sleep(1000/2); hwndForeground = GetForegroundWindow(); if (!hwndForeground) continue; wsprintf(str, "\nforegournd window \t= 0x%4X\n", hwndForeground); print(str); //вывод на консоль threadId = GetWindowThreadProcessId(hwndForeground, 0); if (!threadId) continue; wsprintf(str, "thread is \t\t= 0x%04X\n", threadId); print(str); layout = GetKeyboardLayout(threadId); if (!layout) continue; wsprintf(str, "layout \t\t\t= 0x%04X\n", layout); print(str); if (GetWindowText(hwndForeground, str, 0x100)) { print("window text \t\t= "); print(str);print("\n"); } }while(TRUE);
http://groups.google.com/group/microsoft.public.win32.programmer.ui/browse_thread/thread/e8d796051ccb8181/851c2ad40a6d6021?lnk=st&q=GetKeyboardLayout+console#851c2ad40a6d6021 ???
ссылки это канечно хорошо только вот готового рабочего и проверенного решения там нет, есть только не совсем чёткие пояснения некой\некого Kellie. Пробовал создавать гуевое приложение в котором создавал конслоль и делал теже манипуляции только тред получал через GetGUIThreadInfo. Результаты такие - поток один на оба окна, но если переключать расскладку в онке косоли это никоим образом не отразится на расскладке гуи окна при переключении окон, а вот если переключить раскладку в гуи окне она автоматом переключится в консоли, преидущее значение вообще не сохраняется. Смотрел всякие пунтосвичеры и кейборд ниндзи -- это какой-то ужас, пик корявостей программирования, мало того что без инжектов они не нобходятся так ещё и меняют свою иконку в трее раз через 2 неправильно. Короче фиг с ним вы часто например в консоли вбиваете отличные от инглиша символы?