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

📄 unit1.pas

📁 利用钩子原理实现鼠标键盘记录和回放,DELPHI源代码
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    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;
  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
  //  canPlay:=0
  else if iCode = HC_SYSMODALOFF then
  //  canPlay:=1
  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
//  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 (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
  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;
  Button3.Enabled:=False;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  PlayLog:=0;
  hPlay:=SetwindowsHookEx(WH_JOURNALPLAYBACK,PlayProc,
    HInstance,0);
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
  UnHookWindowsHookEx(hHook);
  hHook:=0;
  Button1.Enabled:=True;
  Button2.Enabled:=False;
  Button3.Enabled:=True;
end;

end.

⌨️ 快捷键说明

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