在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
钩子是Windows中消息处理机制的一个要点,通过安装各种钩子,应用程序能够设置相应的子例程
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Edit1: TEdit; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; EventArr: array [0 .. 1000] of EVENTMSG; EventLog: Integer; PlayLog: Integer; hHook, hPlay: Integer; recOK: Integer; canPlay: Integer; bDelay: Bool; implementation {$R *.DFM} function PlayProc(iCode: Integer; wParam: wParam; lParam: lParam): LRESULT; stdcall; begin canPlay := 1; Result := 0; if iCode < 0 then // 必须将消息传递到钩子链的下一个处理程序 Result := CallNextHookEx(hPlay, iCode, wParam, lParam) else if iCode = HC_SYSMODALON then canPlay := 0 else if iCode = HC_SYSMODALOFF then canPlay := 1 else if ((canPlay = 1) and (iCode = HC_GETNEXT)) then begin if bDelay then begin bDelay := False; Result := 50; // 控制回放的速度,数字越大,越慢 end; pEventMSG(lParam)^ := EventArr[PlayLog]; end else if ((canPlay = 1) and (iCode = HC_SKIP)) then begin bDelay := True; PlayLog := PlayLog + 1; end; if PlayLog >= EventLog then begin UNHookWindowsHookEx(hPlay); end; end; function HookProc(iCode: Integer; wParam: wParam; lParam: lParam): LRESULT; stdcall; begin recOK := 1; // 可以记录 Result := 0; if iCode < 0 then // 必须将消息传递到钩子链的下一个处理程序 Result := CallNextHookEx(hHook, iCode, wParam, lParam) else if iCode = HC_SYSMODALON then recOK := 0 else if iCode = HC_SYSMODALOFF then recOK := 1 else if ((recOK > 0) and (iCode = HC_ACTION)) then begin EventArr[EventLog] := pEventMSG(lParam)^; EventLog := EventLog + 1; if EventLog >= 1000 then begin UNHookWindowsHookEx(hHook); end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin Button1.Caption := '纪录'; Button2.Caption := '停止'; Button3.Caption := '回放'; Button2.Enabled := False; Button3.Enabled := False; end; procedure TForm1.Button1Click(Sender: TObject); begin EventLog := 0; // 建立键盘、鼠标操作消息纪录链 hHook := SetwindowsHookEx(WH_JOURNALRECORD, HookProc, HInstance, 0); Button2.Enabled := True; Button1.Enabled := False; end; procedure TForm1.Button2Click(Sender: TObject); begin UNHookWindowsHookEx(hHook); hHook := 0; Button1.Enabled := True; Button2.Enabled := False; Button3.Enabled := True; end; procedure TForm1.Button3Click(Sender: TObject); begin PlayLog := 0; // 建立键盘鼠标操作消息纪录回放链 hPlay := SetwindowsHookEx(WH_JOURNALPLAYBACK, PlayProc, HInstance, 0); Button3.Enabled := False; end; end.
运行程序,点击“纪录”按钮开始纪录操作,这时你可以在文本控件中输入一些文字,然后点击“ |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论