本文共 2250 字,大约阅读时间需要 7 分钟。
unit mousereplay; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm6 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form6: TForm6; eventarr:array[0..1000] of EVENTMSG; eventlog:integer; playlog:integer; hhook,hplay:integer; bdelay:bool; implementation {$R *.dfm} function playproc(icode:integer;wparam:WPARAM;lparam:LPARAM):LRESULT;stdcall; begin result:=0; if icode<0 then result:=callnexthookex(hplay,icode,wparam,lparam) else if icode=HC_SYSMODALON then //不允许回放 else if icode=HC_SYSMODALOFF then //允许回放 else if icode=HC_GETNEXT then begin if bdelay then begin bdelay:=false; result:=50; end; pEVENTMSG(lparam)^:=eventarr[playlog]; end else if 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 result:=0; if icode<0 then result:=callnexthookex(hhook,icode,wparam,lparam) else if icode=HC_SYSMODALON then //不允许记录 else if icode=HC_SYSMODALOFF then //允许记录 else if icode=HC_ACTION then begin eventarr[eventlog]:=peventMsg(lparam)^; inc(eventlog); if eventlog>=1000 then begin unhookwindowshookex(hhook); end; end; end; procedure TForm6.Button1Click(Sender: TObject); begin eventlog:=0; //建立键盘鼠标操作链 hhook:=setwindowshookex(WH_JOURNALRECORD,hookproc,hinstance,0); button2.Enabled:=true; button1.Enabled:=false; button3.Enabled:=false; end; procedure TForm6.Button2Click(Sender: TObject); begin unhookwindowshookex(hhook); hhook:=0; button1.Enabled:=true; button2.Enabled:=false; button3.Enabled:=true; end; procedure TForm6.Button3Click(Sender: TObject); begin playlog:=0; hplay:=setwindowshookex(WH_JOURNALRECORD,playproc,hinstance,0); end; procedure TForm6.FormCreate(Sender: TObject); begin button2.Enabled:=false; button3.Enabled:=false; end;end.
------------------------------------------
不知为啥,回放不了
转载地址:http://pmvwn.baihongyu.com/