HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

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

Репутация: 107


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

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

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

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

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

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

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

Репутация: 107


По умолчанию

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

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

  #4  
Старый 14.03.2008, 21:24
noobyara
Новичок
Регистрация: 27.01.2008
Сообщений: 13
С нами: 9625751

Репутация: 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
С нами: 10042776

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

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

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

Репутация: 107


По умолчанию

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

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

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

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

  #8  
Старый 15.03.2008, 09:48
desTiny
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
С нами: 10139366

Репутация: 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
С нами: 10535289

Репутация: 107


По умолчанию

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

  #10  
Старый 15.03.2008, 23:01
desTiny
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
С нами: 10139366

Репутация: 1502


По умолчанию

Цитата:
Сообщение от _nic  
Не махлюй надо средствами WinAPI
А ето что?
ReadConsoleA, потом проверяешь то что счситал=)
__________________
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
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить ip по аське Skype, IRC, ICQ, Jabber и другие IM 2 03.09.2004 08:43



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


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




ANTICHAT ™ © 2001- Antichat Kft.

×

Внести депозит

Введите сумму USDT:

Принимается только USDT TRC20. Fake/Flash USDT не засчитывается.

×

Вывести депозит

Сумма USDT:

Ваш USDT TRC20 кошелек:

Заявка будет отправлена администратору.