Что конкретно нужно показать? Обозначение текущей раскладки? Гм... По-простому никак не выйдет, сообщение о смене раскладки получает текущий контрол. Поэтому только через хуки, примерно так: 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.