Windows 10下的JournalRecord-Hook

时间:2017-08-10 11:04:47

标签: delphi winapi

我有一个很大的 - 目前无法解决 - 在Windows 10下与JournalRecord-Hook有关。

16年前,我写了一个宏记录器。它可以作为免费软件下载,并被许多人使用。

这是一个32位程序,用Delphi 6编写。

问题的主要内容是:

CONST HookHandleRecord : HHook = 0;
      JournalRecordProcCalled : boolean = false;

Function JournalRecordProc(Code:integer;wp:wParam;lp:lParam):integer; StdCall;
VAR f : Text;
Begin
if not JournalRecordProcCalled 
   then begin JournalRecordProcCalled:=true;
              assign(f,'JournalRecordProc.txt');Rewrite(f);writeln(f,HookHandleRecord);close(f)
        end;      
Result:=CallNextHookEx(HookHandleRecord,Code,wp,lp)
End;

Procedure Record_Macro; StdCall;
VAR Terminate : double;
f : Text;
Begin
HookHandleRecord:=SetWindowsHookEx(wh_JournalRecord,@JournalRecordProc,hInstance,0);
assign(f,'H:\HookHandleRecord.txt');Rewrite(f);
writeln(f,HookHandleRecord);close(f);
Terminate:=GetTickCount+2000;
repeat Sleep(100);Application.ProcessMessages;
until GetTickCount>=Terminate;
UnhookWindowsHookEx(HookHandleRecord);
Windows.Beep(5000,200);
End;

在所有Windows版本中,“HookHandleRecord”是有效的结果。在Windows 10中,系统在“SetWindowsHookEx”和“UnhookWindowsHookEx”之间挂起,并且永远不会调用“JournalRecordProc”。

在所有其他Windows版本中,代码运行没有问题。

JournalRecordProc和SetWindowsHookEx的调用位于DLL中。

程序和DLL使用有效的Comodo签名进行数字签名,该签名已分配给我的名字。

包含level="requireAdministrator"uiAccess="true"的清单文件包含在Exe和Dlls中。

UAC已停用。

程序以“C:\ Program Files(x86)\ Makro”目录中的管理员权限启动。

谢谢你的帮助!

0 个答案:

没有答案