Название раскладки
От: Begemotik  
Дата: 22.02.03 14:05
Оценка:
Привет всем !
Возможно все просто, но что-то не как не могу найти в мсдне.
Используя GetKeyboardLayoutList получаю я список раскладок установленных в системе. Получаю разумеется идентификаторы типа 0x049049, далее мне надо вывести их пользователю для выбора, в комбобокс. Хотелось бы туда вывести строки типа руский... Как получить эти строки, собственно в этом и есть вопрос.
Все у нас получится...
Re: Название раскладки
От: sasha Грузия  
Дата: 22.02.03 14:58
Оценка:
Здравствуйте, Begemotik, Вы писали:

B>Привет всем !

B>Возможно все просто, но что-то не как не могу найти в мсдне.
B>Используя GetKeyboardLayoutList получаю я список раскладок установленных в системе. Получаю разумеется идентификаторы типа 0x049049, далее мне надо вывести их пользователю для выбора, в комбобокс. Хотелось бы туда вывести строки типа руский... Как получить эти строки, собственно в этом и есть вопрос.

Эту информацию можно получить из реестра
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts


Примерно вот так:
HKL pkl[100];
int klcount = GetKeyboardLayoutList(100, pkl);

TCHAR klname[KL_NAMELENGTH];

for(int i=0; i<klcount; i++)
{
    ActivateKeyboardLayout(pkl[i], 0);
    GetKeyboardLayoutName(klname);
// здесь, зная название раскладки в виде "00000409", можно из реестра достать
// соответствующее ему строку типа "Russian"
}

Не уверен, что это самый простой способ, но на крайний случай сгодится.
Re: Название раскладки
От: Sinclair Россия https://github.com/evilguest/
Дата: 22.02.03 14:59
Оценка:
Здравствуйте, Begemotik, Вы писали:

B>Привет всем !

B>Возможно все просто, но что-то не как не могу найти в мсдне.
B>Используя GetKeyboardLayoutList получаю я список раскладок установленных в системе. Получаю разумеется идентификаторы типа 0x049049, далее мне надо вывести их пользователю для выбора, в комбобокс. Хотелось бы туда вывести строки типа руский... Как получить эти строки, собственно в этом и есть вопрос.
Похоже, надо быстренько пробежаться по списку при помощи ActivateKeyboardLayout(), и повызывать GetKeyboardLayoutName().
... << RSDN@Home 1.0 beta 6 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Название раскладки
От: Begemotik  
Дата: 22.02.03 15:58
Оценка:
Привет

>Похоже, надо быстренько пробежаться по списку при помощи ActivateKeyboardLayout(), и >повызывать GetKeyboardLayoutName().

Она возвращает код, а не название -(

S>Эту информацию можно получить из реестра

S>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts

У меня (XP) там только символьные имена — ru and us, а хотелось бы полные, так как они отражаются в значке переключения языка в систрее. Ну на крайняк так сделаю если не найду другого способа.
Все у нас получится... #95977153
Re[3]: Название раскладки
От: sasha Грузия  
Дата: 24.02.03 10:09
Оценка:
Здравствуйте, Begemotik, Вы писали:

S>>Эту информацию можно получить из реестра

S>>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts

B>У меня (XP) там только символьные имена — ru and us, а хотелось бы полные, так как они отражаются в значке переключения языка в систрее.


И в XP и в 2000-ном символьные имена сидят в ключе
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\[b]Keyboard Layout[b]


А я написал
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\[b]Keyboard Layouts[b]

Почувствуйте разницу
Re[3]: Название раскладки
От: Аноним  
Дата: 08.04.04 09:26
Оценка:
Здравствуйте, Begemotik, Вы писали:


B>У меня (XP) там только символьные имена — ru and us, а хотелось бы полные, так как они отражаются в значке переключения языка в систрее. Ну на крайняк так сделаю если не найду другого способа.


Поднимаю старую тему, но решить ее не могу. Как получить по идентификатору раскладки "нормальные" обозначения языка типа "RU" или "EN". Можно конечно прописать самому ручками, но тогда при появлении нового языка придется каждый раз изменять программу, а это не дело. Как сделать правильно?
Re[4]: Название раскладки
От: BlackHeretic Израиль  
Дата: 08.04.04 10:39
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Begemotik, Вы писали:



B>>У меня (XP) там только символьные имена — ru and us, а хотелось бы полные, так как они отражаются в значке переключения языка в систрее. Ну на крайняк так сделаю если не найду другого способа.


А>Поднимаю старую тему, но решить ее не могу. Как получить по идентификатору раскладки "нормальные" обозначения языка типа "RU" или "EN". Можно конечно прописать самому ручками, но тогда при появлении нового языка придется каждый раз изменять программу, а это не дело. Как сделать правильно?


Встречный вопрос — сколько ныне в год появляется новых языков?
ICQ 156156278
Re[4]: Название раскладки
От: Pavel Dvorkin Россия  
Дата: 08.04.04 11:16
Оценка: +1
Привет!

Unknown wrote:

> Поднимаю старую тему, но решить ее не могу. Как получить по идентификатору раскладки "нормальные" обозначения языка типа "RU" или "EN". Можно конечно прописать самому ручками, но тогда при появлении нового языка придется каждый раз изменять программу, а это не дело. Как сделать правильно?


А чем такое не устраивает ?

char szBuf[10];
HKL hKL = GetKeyboardLayout(GetCurrentThreadId());
GetLocaleInfo(MAKELCID(LOWORD(hKL),
SORT_DEFAULT),LOCALE_SABBREVLANGNAME ,
szBuf, 10);

Возвращает, правда, не двух, а трехбуквенные аббревиатуры. У меня — RUS
и ENU.


--
With best regards,
Pavel Dvorkin
Posted via RSDN NNTP Server 1.7 "Bedlam"
With best regards
Pavel Dvorkin
Re[5]: Название раскладки
От: Аноним  
Дата: 08.04.04 11:42
Оценка:
Здравствуйте, BlackHeretic, Вы писали:

BH>Встречный вопрос — сколько ныне в год появляется новых языков?


Я не имел ввиду, что появляются новые языки, но пользователь может доставить новый язык например: DE.
Re: Название раскладки
От: shilon Молдова  
Дата: 08.04.04 12:54
Оценка:
Здравствуйте, Begemotik, Вы писали:

B>Привет всем !

B>Возможно все просто, но что-то не как не могу найти в мсдне.
B>Используя GetKeyboardLayoutList получаю я список раскладок установленных в системе. Получаю разумеется идентификаторы типа 0x049049, далее мне надо вывести их пользователю для выбора, в комбобокс. Хотелось бы туда вывести строки типа руский... Как получить эти строки, собственно в этом и есть вопрос.

GetLocaleInfo( (LCID) MAKELCID(GetKeyboardLayout(NULL),SORT_DEFAULT),
LOCALE_SISO639LANGNAME, str, 10);

вот этот код возвращает 2ух символьнное название раскладки.
Re[6]: Название раскладки
От: BlackHeretic Израиль  
Дата: 08.04.04 13:38
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, BlackHeretic, Вы писали:


BH>>Встречный вопрос — сколько ныне в год появляется новых языков?


А>Я не имел ввиду, что появляются новые языки, но пользователь может доставить новый язык например: DE.


Ну просто я сторонник составления таблицы всех вариантов, даже тех что не установлены. Хотя полностью согласен, что если уж есть хороший способ динамического получения — то он предпочтительнее.
То что написал sasha — в точности то что нужно
ICQ 156156278
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.