ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Как определить раскладку?
  #1  
Старый 14.03.2008, 20:45
_nic
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме:
2982851

Репутация: 107


По умолчанию Как определить раскладку?

Надо определить чем вводится текст кириллицей или латинецей.Естетвенно я знаю о GetLocaleInfo но оно как им некрути возращает только 0419 А мне нада както узнать вводится ли руский текст или английский.
 
Ответить с цитированием

  #2  
Старый 14.03.2008, 20:56
Jes
Постоянный
Регистрация: 16.04.2007
Сообщений: 398
Провел на форуме:
3371897

Репутация: 1462
По умолчанию

if GetKeyboardLayout(GetWindowThreadProcessId(GetFore groundWindow, null)) == 67699721
//раскладка английская
else
//раскладка НЕанглийская, например 68748313 соответствует русской

вроде так ...
 
Ответить с цитированием

  #3  
Старый 14.03.2008, 21:13
_nic
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме:
2982851

Репутация: 107


По умолчанию

Цитата:
Сообщение от Jes  
if GetKeyboardLayout(GetWindowThreadProcessId(GetFore groundWindow, null)) == 67699721
//раскладка английская
else
//раскладка НЕанглийская, например 68748313 соответствует русской

вроде так ...
Мне нада это сделать в консольной проге.А GetWindowThreadProcessId насколько я понимаю без WinMain непокатит.
 
Ответить с цитированием

  #4  
Старый 14.03.2008, 21:24
noobyara
Новичок
Регистрация: 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..
 
Ответить с цитированием

  #5  
Старый 14.03.2008, 23:01
Forcer
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
Провел на форуме:
3578578

Репутация: 275
Отправить сообщение для Forcer с помощью ICQ
По умолчанию

У меня подобный код показывает только раскладку по-умолчанию, а совсем не ту, которая включена. В чём может быть проблема?
 
Ответить с цитированием

  #6  
Старый 15.03.2008, 00:45
_nic
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме:
2982851

Репутация: 107


По умолчанию

Цитата:
Сообщение от Forcer  
У меня подобный код показывает только раскладку по-умолчанию, а совсем не ту, которая включена. В чём может быть проблема?
Аналогично,сколько Alt+Shift неклацай выдает одно и тоже значение.
 
Ответить с цитированием

  #7  
Старый 15.03.2008, 01:23
noobyara
Новичок
Регистрация: 27.01.2008
Сообщений: 13
Провел на форуме:
210819

Репутация: 26
По умолчанию

Цитата:
Сообщение от _nic  
Аналогично,сколько Alt+Shift неклацай выдает одно и тоже значение.
просто у вас консольное приложение, там система ввода-вывода по другому устроена и код написанный выше, будет работать только с оконным приложением..
 
Ответить с цитированием

  #8  
Старый 15.03.2008, 09:48
desTiny
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
 
Ответить с цитированием

  #9  
Старый 15.03.2008, 12:15
_nic
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме:
2982851

Репутация: 107


По умолчанию

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

  #10  
Старый 15.03.2008, 16:57
KindEcstasy
Участник форума
Регистрация: 30.09.2006
Сообщений: 134
Провел на форуме:
352963

Репутация: 197
Отправить сообщение для KindEcstasy с помощью ICQ
Smile

чё мудрить то? =\

Код:
buffer db KL_NAMELENGTH dup (?)

push offset buffer
call GetKeyboardLayoutName
потом lstrcmp сравниваешь и всё )

Последний раз редактировалось KindEcstasy; 15.03.2008 в 17:01..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Беспредельный спам ak[id] Статьи 3 17.12.2007 13:55
Кэш браузера или Как была доказана твоя вина MorpheuS Авторские статьи 19 21.05.2007 03:27
Как использовать cross-site scripting (css) foreva Чужие Статьи 0 06.02.2005 19:03
Как определить ip по аське ICQ 2 03.09.2004 08:43



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ