我创建了一个系统范围的键盘挂钩DLL,它已在Windows XP中成功运行多年。
然而,似乎在某些更高版本的Windows(Vista Home Premium和Windows 7,仅举几个例子)中,挂钩要么根本不起作用,要么只能在安装它的应用程序中本地工作
我已经看到它在互联网上的几个地方建议在调用SetWindowsHookEx时将WH-KEYBOARD更改为WH-KEYBOARD-LL,但是当我尝试它时似乎没有帮助。除了将钩子类型更改为WH-KEYBOARD-LL之外,我还需要更改其他内容吗?
(P.S。:我必须将WH-KEYBOARD-LL定义为13,因为它没有在Delphi中定义。我假设这是准确的。)
答案 0 :(得分:8)
确保托管挂钩的进程与您要挂钩的应用程序具有相同的权限级别。键盘和其他挂钩具有很高的安全风险,因此Vista和更高版本更改为仅允许在公共特定安全上下文中的进程中的系统范围挂钩。换句话说,如果使用用户权限启动挂钩主机进程,它将只挂接处于相同权限级别的进程。如果您考虑一下,这是有道理的,因为您不希望用户级进程能够将代码注入管理级进程。这在很多层面都很糟糕。