⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.pas

📁 用DLL文件的形式挂载键盘与鼠标钩子的例子
💻 PAS
字号:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, StdCtrls,
  MouseHook, KeyboardHook;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Label1: TLabel;
    GroupBox2: TGroupBox;
    btStartMouse: TButton;
    btStartKeyboard: TButton;
    Label2: TLabel;
    Label3: TLabel;
    procedure btStartMouseClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure btStartKeyboardClick(Sender: TObject);
  private
    mhook: TMouseHook;
    khook: TKeyboardHook;
    procedure HookMouseMove(const h: HWND; const X, Y: Integer);
    procedure HookMouseClick(const h: HWND; const X, Y: Integer);
    procedure HookKeyboardDown(const KeyCode: Integer);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btStartMouseClick(Sender: TObject);
begin
  if btStartMouse.Caption = 'Start' then
  begin
    if mhook.Start then
      btStartMouse.Caption := 'Stop';
  end
  else
  begin
    mhook.Stop;
    btStartMouse.Caption := 'Start';
  end;
end;

procedure TForm1.btStartKeyboardClick(Sender: TObject);
begin
  if btStartKeyboard.Caption = 'Start' then
  begin
    if khook.Start then
      btStartKeyboard.Caption := 'Stop';
  end
  else
  begin
    khook.Stop;
    btStartKeyboard.Caption := 'Start';
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // 创建mouse hook实例
  mhook := TMouseHook.Create;
  mhook.DLLName := 'mousehook.dll';
  mhook.Blocked := False;
  mhook.OnMouseMove := HookMouseMove;
  mhook.OnMouseClick := HookMouseClick;

  // 创建keyboard hook实例
  khook := TKeyboardHook.Create;
  khook.DLLName := 'keyboardhook.dll';
  khook.OnKeyDown := HookKeyboardDown;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  // 停止hook, 释放对象
  if khook.Active then
    khook.Stop;
  if Assigned(khook) then
    khook.Free;

  if mhook.Active then
    mhook.Stop;
  if Assigned(mhook) then
    mhook.Free;
end;

procedure TForm1.HookKeyboardDown(const KeyCode: Integer);
begin
  // 键盘消息测试
  if KeyCode = VK_ESCAPE then
  begin
    MessageBox(Handle, 'We get a keyboard message: VK_ESCAPE', 'Info', MB_OK);
    if khook.Active then
      khook.Stop;
  end;
end;

procedure TForm1.HookMouseMove(const h: HWND; const X, Y: Integer);
begin
  // 鼠标消息测试 OnMove
  Label1.Caption := Format('Position: WND: %d - X: %d - Y: %d', [h, X, Y])
end;

procedure TForm1.HookMouseClick(const h: HWND; const X, Y: Integer);
begin
  // 鼠标消息测试 OnClick
  Label2.Caption := Format('Click at: WND: %d - X: %d - Y: %d', [h, x, y]);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -