5

我创建了一个系统范围的键盘挂钩 DLL,该 DLL 在 Windows XP 中已成功运行多年。

但是,似乎在某些更高版本的 Windows(Vista Home Premium 和 Windows 7,仅举几例)中,该挂钩要么根本不起作用,要么仅在安装它的应用程序中本地起作用。

我在互联网上的几个地方看到它建议在调用 SetWindowsHookEx 时将 WH-KEYBOARD 更改为 WH-KEYBOARD-LL,但是当我尝试它时这似乎没有帮助。除了将挂钩类型更改为 WH-KEYBOARD-LL 之外,我还需要更改其他内容吗?

(PS:我必须将 WH-KEYBOARD-LL 定义为 13,因为它没有在 Delphi 中定义。我假设这是准确的。)

4

1 回答 1

8

确保托管挂钩的进程与您要挂钩的应用程序具有相同的权限级别。键盘和其他挂钩具有很高的安全风险,因此 Vista 和更高版本被更改为仅允许在公共特定安全上下文中的进程中使用系统范围的挂钩。换句话说,如果你以用户权限启动钩子宿主进程,它只会钩子具有相同权限级别的进程。如果您考虑一下,这是有道理的,因为您不希望用户级进程能够将代码注入管理员级进程。这在很多层面上都很糟糕。

于 2009-10-01T23:08:38.813 回答