Языковая раскладка - всё, что с этим связанно!!
Маленький вопросик: как определить, какие клавиши стоят в ПК для переключения раскладки языка (Shift+Alt или Ctrl+Shift или Ctrl+Shift+Alt и тому подобное).
И ещё: как узнать вообще какие языки используются в текущей операционке (XP)...(Например у меня только Russian и English). На многих других ещё и немецикий стоит и т.п. (Как узнать??)
Заранее спасибо!!
ActivateKeyboardLayout
GetAsyncKeyState
GetKeyboardLayout
GetKeyboardLayoutList
GetKeyboardState
GetKeyState
SetKeyboardState
наверняка что-то еще, но собственно, найдя описание этих функций, можно пройти по ссылкам на похожие
реестр HKEY_CURRENT_USER\Keyboard Layout\Toggle
параметр Hotkey
значения 1 - Alt + Shift
2 - Ctrl + Shift
3 - не определено
4 - `
HKL *hkLayout = new HKL [nSize];
WORD *wLangId = new WORD [nSize];
GetKeyboardLayoutList(nSize, hkLayout);
for (int i = 0; i < nSize; i++)
{
wLangId = LOWORD(hkLayout);
}
В массиве wLangId теперь находятся идентификаторы языков. Конкретные значения смотри в MSDN. Ищи по "language identifiers". Для примера:
0x0409 - English (United States)
0x0419 - Russian
0x0407 - German (Standart)
Правильно я использовал код, чтобы узнать wLangID??
------------------------------------------------------
HKL *hkLayout = new HKL [nSize];
WORD *wLangId = new WORD [nSize];
GetKeyboardLayoutList(nSize, hkLayout);
for (int i = 0; i < nSize; i++)
{
wLangId = LOWORD(hkLayout);
Memo1->Lines->Add(wLangId);
}
Он вывел в Memo цифры: 1049, 1033.
-----------------------------------------------
Однако по-моему что-то не то. Как использовать эти цифры для переключения раскладки??
по этому поводу я знаю такую штуку:
-----------------------Переключение на конк. язык:
LoadKeyboardLayout("00000409", KLF_ACTIVATE);// Английская
LoadKeyboardLayout("00000419", KLF_ACTIVATE);// Русская
----------------------------------------------------
По этому поводу я нашёл ещё одну вещь:
----------------------Переключение на след.язык.
ActivateKeyboardLayout(0, 0);
--------------------------------------------------
Пока ещё не изучал реестр. Встречный вопросик. Этот ключ реестра используется один и в Vista и в XP??
-----------------------------------------------------------
Вывести список языков в мемо:
HKL *hkLayout = new HKL [nSize];
WORD *wLangId = new WORD [nSize];
GetKeyboardLayoutList(nSize, hkLayout);
for (int i = 0; i < nSize; i++)
{
wLangId = LOWORD(hkLayout);
switch (wLangId)
{
case 0x0409: Memo1->Lines->Add("English (United States)"); break;
case 0x0419: Memo1->Lines->Add("Russian"); break;
case 0x0407: Memo1->Lines->Add("German (Standart)"); break;
}
}
Переключить раскладку:
круто, thank!, но для того, что бы узнать всё же, какие языки в системе (вдруг там будет турецкий гость, а у него на ПК ваще другие языки) необходимо сделать такую штуку не с тремя а со всеми....сколько их там, 144?? Больше?? Капец...
2.Я, например, вывел эту штуковину на Memo..( типа сделал полторы сотни строк)..Можно ли ... или нет, я вывел из в ListBox! Можно по клацанью на ,как говорится, Item's компонента, переключить вот, как вы показали,
ActivateKeyboardLayout(hkLayout[1], 0);
Вот этип способом?? :)
ну намекните,пожалуйста, а то в голову не лезет чёт даже... :(:(
ща да просишься