Получение текущей раскладки клавиатуры и отображение её в Label. Delphi XE7. - Вопросы по Delphi

Вопрос Получение текущей раскладки клавиатуры и отображение её в Label. Delphi XE7.

Регистрация
2 Дек 2013
Сообщения
81
Репутация
0
Спасибо
0
Монет
0
Нужен простенький аккуратненький код без крайностей и удаления в дебри.
 
Регистрация
1 Ноя 2013
Сообщения
93
Репутация
0
Спасибо
0
Монет
0
Что конкретно нужно показать? Обозначение текущей раскладки? Гм... По-простому никак не выйдет, сообщение о смене раскладки получает текущий контрол. Поэтому только через хуки, примерно так: unit Unit2; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm2 = class(TForm) Label1: TLabel; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation {$R *.dfm} { TForm2 } var FLangHook: HHOOK = 0; function LangHookProc(Code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin if (Code = HC_ACTION) and (PCWPStruct(lParam)^.message = WM_INPUTLANGCHANGE) then Form2.Label1.Caption:=IntToStr(GetKeyboardLayout(0)); Result := CallNextHookEx(FLangHook, Code, wParam, lParam); end; procedure TForm2.FormCreate(Sender: TObject); begin FLangHook := SetWindowsHookEx(WH_CALLWNDPROC, @LangHookProc, HInstance, GetCurrentThreadId); if FLangHook = 0 then RaiseLastOSError; end; procedure TForm2.FormDestroy(Sender: TObject); begin if FLangHook <> 0 then begin UnhookWindowsHookEx(FLangHook); FLangHook := 0; end; end; end.
 
Сверху Снизу