ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|
Как определить раскладку? |

14.03.2008, 20:45
|
|
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме: 2982851
Репутация:
107
|
|
Как определить раскладку?
Надо определить чем вводится текст кириллицей или латинецей.Естетвенно я знаю о GetLocaleInfo но оно как им некрути возращает только 0419  А мне нада както узнать вводится ли руский текст или английский.
|
|
|

14.03.2008, 20:56
|
|
Постоянный
Регистрация: 16.04.2007
Сообщений: 398
Провел на форуме: 3371897
Репутация:
1462
|
|
if GetKeyboardLayout(GetWindowThreadProcessId(GetFore groundWindow, null)) == 67699721
//раскладка английская
else
//раскладка НЕанглийская, например 68748313 соответствует русской
вроде так ...
|
|
|

14.03.2008, 21:13
|
|
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме: 2982851
Репутация:
107
|
|
Сообщение от Jes
if GetKeyboardLayout(GetWindowThreadProcessId(GetFore groundWindow, null)) == 67699721
//раскладка английская
else
//раскладка НЕанглийская, например 68748313 соответствует русской
вроде так ...
Мне нада это сделать в консольной проге.А GetWindowThreadProcessId насколько я понимаю без WinMain непокатит.
|
|
|

14.03.2008, 21:24
|
|
Новичок
Регистрация: 27.01.2008
Сообщений: 13
Провел на форуме: 210819
Репутация:
26
|
|
Видимо правильнее сравнивать не возвращаемое значение, а его low word с индификатором раскладки. к примеру:
Код:
HKL hKl = GetKeyboardLayout(GetCurrentThreadId());
WORD id = LOWORD(hKl));
switch(id){
case 0x0419:break;//рус
case 0x0409:break;//анг
}
И если тебя надо знать раскладку только твоего приложения(с учетом того что оно однопоточное), используй GetCurrentThreadId() вместо GetWindowThreadProcessId()
и
The return value is the keyboard layout handle for the thread. The low word contains a locale identifier identifying the input language and the high word contains a device handle identifying the physical layout of the keyboard.
Последний раз редактировалось noobyara; 14.03.2008 в 21:34..
|
|
|

14.03.2008, 23:01
|
|
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
Провел на форуме: 3578578
Репутация:
275
|
|
У меня подобный код показывает только раскладку по-умолчанию, а совсем не ту, которая включена. В чём может быть проблема?
|
|
|

15.03.2008, 00:45
|
|
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме: 2982851
Репутация:
107
|
|
Сообщение от Forcer
У меня подобный код показывает только раскладку по-умолчанию, а совсем не ту, которая включена. В чём может быть проблема?
Аналогично,сколько Alt+Shift неклацай выдает одно и тоже значение.
|
|
|

15.03.2008, 01:23
|
|
Новичок
Регистрация: 27.01.2008
Сообщений: 13
Провел на форуме: 210819
Репутация:
26
|
|
Сообщение от _nic
Аналогично,сколько Alt+Shift неклацай выдает одно и тоже значение.
просто у вас консольное приложение, там система ввода-вывода по другому устроена и код написанный выше, будет работать только с оконным приложением..
|
|
|

15.03.2008, 09:48
|
|
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме: 3008839
Репутация:
1502
|
|
Придумал гениальный способ:
читаешь символы, после этого:
if (('a' < ch) and (ch < 'z')) or (('A' < ch) and (ch < 'Z')) then
// английская раскладка
else
// русская...
__________________
Bedankt euch dafür bei euch selbst.
H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
|
|
|

15.03.2008, 12:15
|
|
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме: 2982851
Репутация:
107
|
|
Сообщение от desTiny
Придумал гениальный способ:
читаешь символы, после этого:
if (('a' < ch) and (ch < 'z')) or (('A' < ch) and (ch < 'Z')) then
// английская раскладка
else
// русская...
Не махлюй надо средствами WinAPI 
|
|
|

15.03.2008, 16:57
|
|
Участник форума
Регистрация: 30.09.2006
Сообщений: 134
Провел на форуме: 352963
Репутация:
197
|
|
чё мудрить то? =\
Код:
buffer db KL_NAMELENGTH dup (?)
push offset buffer
call GetKeyboardLayoutName
потом lstrcmp сравниваешь и всё )
Последний раз редактировалось KindEcstasy; 15.03.2008 в 17:01..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|