unit Unit1;
// download by http://www.codefans.net
interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls; type
TForm1 = class(TForm)
btn1: TButton;
btn2: TButton;
btn3: TButton;
procedure FormCreate(Sender: TObject);
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1;
EventArr:array[..]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:=;
if iCode < 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:=;
end;
pEventMSG(lParam)^:=EventArr[PlayLog];
end
else if (iCode = HC_SKIP)then begin
bDelay := True;
PlayLog:=PlayLog+;
end;
if PlayLog>=EventLog then begin
UNHookWindowsHookEx(hPlay);
end;
end; function HookProc(iCode:Integer;wParam:wParam;lParam:lParam):LRESULT;stdcall;
begin
// recOK:=1;
Result:=;
if iCode < 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+; if EventLog>= then begin
UnHookWindowsHookEx(hHook);
end;
end;
end; procedure TForm1.FormCreate(Sender: TObject);
begin
btn2.Enabled:=False;
btn3.Enabled:=False;
end; procedure TForm1.btn1Click(Sender: TObject);
begin
EventLog:=;
hHook:=SetwindowsHookEx(WH_JOURNALRECORD,HookProc,HInstance,);
btn2.Enabled:=True;
btn1.Enabled:=False;
btn3.Enabled:=False;
end; procedure TForm1.btn2Click(Sender: TObject);
begin
UnHookWindowsHookEx(hHook);
hHook:=;
btn1.Enabled:=True;
btn2.Enabled:=False;
btn3.Enabled:=True;
end; procedure TForm1.btn3Click(Sender: TObject);
begin
PlayLog:=;
hPlay:=SetwindowsHookEx(WH_JOURNALPLAYBACK,PlayProc,
HInstance,);
end; end.