Надо определить чем вводится текст кириллицей или латинецей.Естетвенно я знаю о GetLocaleInfo но оно как им некрути возращает только 0419 А мне нада както узнать вводится ли руский текст или английский.
if GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, null)) == 67699721 //раскладка английская else //раскладка НЕанглийская, например 68748313 соответствует русской вроде так ...
Мне нада это сделать в консольной проге.А GetWindowThreadProcessId насколько я понимаю без WinMain непокатит.
Видимо правильнее сравнивать не возвращаемое значение, а его low word с индификатором раскладки. к примеру: Code: HKL hKl = GetKeyboardLayout(GetCurrentThreadId()); WORD id = LOWORD(hKl)); switch(id){ case 0x0419:break;//рус case 0x0409:break;//анг } И если тебя надо знать раскладку только твоего приложения(с учетом того что оно однопоточное), используй GetCurrentThreadId() вместо GetWindowThreadProcessId() и
У меня подобный код показывает только раскладку по-умолчанию, а совсем не ту, которая включена. В чём может быть проблема?
просто у вас консольное приложение, там система ввода-вывода по другому устроена и код написанный выше, будет работать только с оконным приложением..
Придумал гениальный способ: читаешь символы, после этого: if (('a' < ch) and (ch < 'z')) or (('A' < ch) and (ch < 'Z')) then // английская раскладка else // русская...
чё мудрить то? =\ Code: buffer db KL_NAMELENGTH dup (?) push offset buffer call GetKeyboardLayoutName потом lstrcmp сравниваешь и всё )