📄 main.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 + -