с Windows 7 под консоль запускается процесс CONHOST, в котором есть поток с окном класс="IME"
владелей этого окна=GetAncestor(hwnd, GA_ROOTOWNER) - окно консоли.
окно IME чутко реагирует на смену раскладки, котокую можно получить через GetKeyboardLayout
быстрый способ найти ЭТО окно через EnumWindows, перебор процессов -> потоков -> окон в разы дольше
HWND hWnd=hWndCon; //окно консоли
EnumWindows(CallBackEnumWnd, (LPARAM)&hWnd);
if(hWnd!=hWndCon && ::IsWindow(hWnd))
DWORD tid = ::GetWindowThreadProcessId(hWnd, 0);
hkl = ::GetKeyboardLayout(tid); //1033(0x409)-en 1049(0x419)-ru
BOOL CALLBACK CallBackEnumWnd(HWND hwnd, LPARAM lParam)
char sClassName[256];
int ns = GetClassName(hwnd, sClassName, 256);
if(ns>2 && 0==_stricmp(sClassName, "IME") ) //сравнение в lowercase
if(*(HWND*)lParam==::GetAncestor(hwnd, GA_ROOTOWNER)) //владелец тукущая консоль
*(HWND*)lParam = hwnd;
return FALSE; //стоп перебор