Отследить события мыши и клавиатуры во всей Windows |
ОГЛАВЛЕНИЕ    HOME  MAIL |
Чтобы отслеживать события во всей Windows используют ловушку (hook). Для этого нужно создать функцию, обрабатывающую сообщения. Адрес этой функции нужно передать Windows при установке ловушки. Эта программа определяет, нажата ли левая или правая кнопка мыши, при движении мыши определяет ее координаты. При нажатии на клавишу клавиатуры определяется, что это за клавиша. var HookHandle: hHook; function HookProc(Code: integer; WParam: word; LParam: Longint): Longint; stdcall; var msg: PEVENTMSG; key: integer; begin if Code >= 0 then begin result := 0; msg := Pointer(LParam); with Form1 do case msg.message of WM_MOUSEMOVE: Caption := IntToStr(msg.ParamL) + #32 + IntToStr(msg.ParamH); WM_LBUTTONDOWN: CheckBox1.Checked := true; WM_LBUTTONUP: CheckBox1.Checked := false; WM_RBUTTONDOWN: CheckBox2.Checked := true; WM_RBUTTONUP: CheckBox2.Checked := false; WM_KEYUP: CheckBox3.Checked := false; WM_KEYDOWN: begin CheckBox3.Checked := true; key := msg.paramL and 255; if key in [48..57, 65..90] then Edit1.Text := Edit1.Text + chr(key); end; end; end else result := CallNextHookEx(HookHandle, code, WParam, LParam); end; procedure TForm1.FormCreate(Sender: TObject); begin Form1.FormStyle := fsStayOnTop; CheckBox1.Enabled := false; CheckBox1.Caption := 'left button'; CheckBox2.Enabled := false; CheckBox2.Caption := 'right button'; CheckBox3.Enabled := false; CheckBox3.Caption := 'keyboard'; HookHandle := SetWindowsHookEx(WH_JOURNALRECORD, @HookProc, HInstance, 0); Edit1.Text := ''; Edit1.Enabled := false; end; procedure TForm1.FormDestroy(Sender: TObject); begin if HookHandle > 0 then UnhookWindowsHookEx(HookHandle); end; email: delphi4all@narod.ru |