重新发布了大约 20 年前编写的更新代码。
请记住,在某些情况下,32 位和 64 位版本的 DLL 都是必需的。
项目将在 Delphi XE2 及更高版本中编译。选择 XE2 是因为它可以针对 32 位和 64 位进行编译,并且二进制占用空间较小。
为 Delphi Berlin 提供了一个清单文件,其中包括“uiAccess”。较新的 IDE 内置了此选项。调试最好使用不包含“uiAccess”的清单来完成。 “LinkManifests.cmd”将生成指向所提供清单的符号链接。
从 Windows 10.1903.18362.295 开始,沙盒 VM 允许在没有代码签名的情况下进行调试测试。
最好更改 DLL 名称、更改 Mapfile 文件名并按照以下步骤操作:
如果没有这个挂钩,“uiAccess”应用程序将失败并可能锁定您的应用程序。
Journal hook 的记录和回放。该代码可以驻留在 EXE 或 DLL 中,并且适用于 32/64 位,无需附加版本。然而,我阅读本文的方式是,最好使用 DLL,因为非本机位应用程序最终将通过 thunking 机制加载您的代码。
挂钩通过 PostMessage 发布的所有消息,最好是细化您需要观看的内容,让其余的内容通过。当前的演示只是在单击系统菜单时将消息发送回原始应用程序。
当有键盘消息(WM_KEYUP 或 WM_KEYDOWN)需要处理时,挂钩所有 GetMessage 或 PeekMessage 函数。当前的演示只是在使用 ALT+Numkey_1 时将消息发送回原始应用程序。
使用 PID 将 DLL 注入到进程中,其中 DDetours 调用本质上是重定向 API。
该方法可以使用针对单个进程的Hook进程来减轻系统的负载。
最简单的测试方法:
需要:Delphi Detours 库