Нужно ловить сообщение WM_INPUTLANGCHANGEREQUEST

 

· Setup.bat

 

Code:

@echo off

copy HookAgnt.dll %windir%\system

copy kbdhook.exe %windir%\system

start HookAgnt.reg

 

Эта процедура посылает сообщение о нажатии клавиши.

 

Для этого можно воспользоваться функцией GetHeapStatus:

 

Code:

SendMessage(Handle,WM_SYSCOMMAND,SC_TASKLIST,0);

 Автор ответа: TwoK

 

Code:

procedure EmptyKeyQueue;

var

msg: TMsg;

begin

while PeekMessage(msg, 0, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE or PM_NOYIELD) do

   ;

end;

 

begin

EmptyKeyQueue;

end.

 

Code:

procedure TForm1.Button1Click(Sender: TObject);//На русский

var

Layout: array[0.. KL_NAMELENGTH] of char;

begin

LoadKeyboardLayout( StrCopy(Layout,'00000419'),KLF_ACTIVATE);

end;

 

procedure TForm1.Button2Click(Sender: TObject);//На английский

var

Layout: array[0.. KL_NAMELENGTH] of char;

begin

LoadKeyboardLayout(StrCopy(Layout,'00000409'),KLF_ACTIVATE);

end;

 

 

Code:

VAR

KS: TKeyboardState;

begin

GetKeyboardState(KS);

KS[020] := KS[020] XOR 1; //Caps Lock

KS[144] := KS[144] XOR 1; //Num Lock

KS[145] := KS[145] XOR 1; //Scroll Lock

SetKeyboardState(KS);

end;

 

 Проверяйте значение переменной key на равенство VK_RIGHT, VK_LEFT, VK_F1 и т.д. на событии KeyDown формы

Автор: Arx 

Возможный вариант - присвоить ссылку на этот компонент свойству FocusControl TLabel'а. В примере используется невидимый Label для создания "быстрой" клавиши (Alt+M) компонента Memo. Чтобы использовать пример, разместите на форме компонент TMemo, Label и несколько других компонентов, которые могут принимать фокус ввода. Запустите программу, переведите фокус ввода куда-нибудь вне Memo и нажмите Alt+M - фокус ввода вернется в Memo.