我有一个很大的 - 目前无法解决 - 在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”目录中的管理员权限启动。
谢谢你的帮助!