我创建了一个系统范围的键盘 Hook DLL,它在 Windows XP 中已成功运行多年。
但是,似乎在某些更高版本的 Windows(Vista Home Premium 和 Windows 7,仅举几例)中,该 Hook 要么根本不起作用,要么仅在安装它的应用程序本地起作用.
我在 Internet 上的几个地方看到它建议在调用 SetWindowsHookEx 时将 WH-KEYBOARD 更改为 WH-KEYBOARD-LL,但是当我尝试时这似乎没有帮助。除了将 Hook 类型更改为 WH-KEYBOARD-LL 之外,还有什么需要更改的吗?
(附言:我必须将 WH-KEYBOARD-LL 定义为 13,因为它没有在 Delphi 中定义。我假设这是准确的。)
最佳答案
确保托管 Hook 的进程与您打算 Hook 的应用程序处于相同的特权级别。键盘和其他 Hook 具有很高的安全风险,因此 Vista 及更高版本被更改为仅允许在某个共同的特定安全上下文中的进程中进行系统范围的 Hook 。也就是说,如果你以用户权限启动hook宿主进程,它只会hook同权限级别的进程。如果您考虑一下,这是有道理的,因为您不希望用户级进程能够将代码注入(inject)管理员级进程。这在很多层面上都很糟糕。
关于windows - Vista 及更高版本上的系统范围键盘钩子(Hook),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1505983/