Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Раскладка клавиатуры [D7, WinXP]


Dmitry_04 ©   (2004-11-24 03:15:00) 

Как мне узнать раскладку клавиатуры в коротком виде? Например русский - RU, английский - EN. Т.е. как выводится в трее...

А еще функция GetKeyboardLayout как-то не понятно работает...
так GetKeyboardLayout(Handle) - всегда 0 выдает, а так GetKeyboardLayout(0) - какое-то число...
По идее она должна выдавать числа такие как в реестре

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts

Помогите мне!


Игорь Шевченко   (2004-11-24 11:34:00) [1]


> Как мне узнать раскладку клавиатуры в коротком виде? Например
> русский - RU, английский - EN. Т.е. как выводится в трее...


http://www.schevchenko.net.ru/SRC/EnumFunctions_60.zip


Leonid Troyanovsky   (2004-11-24 11:28:00) [2]


> Dmitry_04   (24.11.04 03:15)  
> Как мне узнать раскладку клавиатуры в коротком виде? Например
> русский - RU, английский - EN. Т.е. как выводится в трее...
>
> А еще функция GetKeyboardLayout как-то не понятно работает...
> так GetKeyboardLayout(Handle) - всегда 0 выдает, а так GetKeyboardLayout(0)
> - какое-то число...


{Form1 with OnCreate,  ListBox1 with OnClick}

procedure GetKLList(List: TStrings);
var
 AList : array [0..9] of Hkl;
 AklName: array [0..2] of Char;
 i: Longint;
begin
 List.Clear;
 for i := 0 to GetKeyboardLayoutList(SizeOf(AList), AList)-1 do
   begin
     GetLocaleInfo( LoWord(AList[i]),
                    LOCALE_SABBREVLANGNAME,
                    AklName,
                    SizeOf(AklName));
     List.AddObject(AklName, Pointer(AList[i]));
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 GetKLList(ListBox1.Items);
 ListBox1.ItemIndex := 0;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin
 with Sender as TListBox do
   ActivateKeyboardLayout(Hkl(Items.Objects[ItemIndex]), 0);
end;


Ну, а GetKeyboardLayout возвращает hkl

 case GetKeyboardLayout( GetWindowThreadProcessID(
                         GetForegroundWindow,
                         nil)) and $3FF of
   LANG_ENGLISH: Caption := 'EN';
   LANG_RUSSIAN: Caption := 'RU';
 end;


--
С уважением, LVT.


Bobby Digital   (2004-11-24 03:29:00) [3]

то я не внимательно прочитал .. не общай внимания на 1 коммент


Bobby Digital   (2004-11-24 03:28:00) [4]

блин ... ну пусть число 1 - рус а число 2 - англ. ... поставь условие если возвращается 1 то заменяй на RU, если 2 на EN


Dmitry_04   (2004-11-24 03:24:00) [5]

ой... там не в трее, а в реесте


Dmitry_04   (2004-11-24 03:23:00) [6]

Забыл еще сказать... надо это сделать для всех языков... Наверняка какая-то функция должна считывать какое-то число, а потом по этому числу в трее узнать какой язык и его сокращение...


Наверх

Титульная страница Поиск, карта сайта Написать письмо