На главную

Отследить события мыши и клавиатуры во всей Windows

Отследить события мыши и клавиатуры во всей 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
Hosted by uCoz