Certa vez me deparei com um problema: Como mover uma imagem no form através do teclado? Aqui está um código de hook procedure local que intercepta as 4 setas do teclado. procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Movimento(var Msg:TMessage); message WM_USER+1; var Form1: TForm1; HC_KEYBOARD_Handle:THandle; // Handle da hook implementation {$R *.dfm} // hook função tipo teclado function KeyboardProc(nCode:Integer; wParam:WPARAM; lParam:LPARAM):LRESULT; stdcall; begin if wParam in [37,38,39,40] then SendMessage(Form1.Handle, WM_USER+1, wParam, lParam); Result := CallNextHookEx(HC_KEYBOARD_Handle, nCode, wParam, lParam); end; // instala hook procedure local procedure TForm1.FormCreate(Sender: TObject); begin HC_KEYBOARD_Handle := SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, 0, GetCurrentThreadID); end; // libera a hook procedure procedure TForm1.FormDestroy(Sender: TObject); begin UnhookWindowsHookEx(HC_KEYBOARD_Handle); inherited; end; // se a hook interceptou as setas do teclado, manda uma msg p/ cá procedure TForm1.Movimento(var Msg:TMessage); begin Case Msg.wParam of 37 : Image1.Left := Image1.Left-1; 39 : Image1.Left := Image1.Left+1; 38 : Image1.Top := Image1.Top-1; 40 : Image1.Top := Image1.Top+1; end; end. Obs: só funciona dentro da aplicação. As hooks globais são um pouco mais complicadas.