2009-10-01 27 views
5

我有一个系统范围的键盘钩子DLL,我已经创建了多年在Windows XP中成功运行的DLL。在Vista和更高版本上的系统宽键盘钩子

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

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

(PS:我必须定义WH-键盘LL为13,因为它不是在德尔福定义我假设这是正确的。)

+0

根据http://pinvoke.net/default.aspx/Enums/HookType.html,是的,WH_KEYBOARD_LL是13。 – 2009-10-01 19:43:22

回答

8

确保托管挂钩的过程是相同的您想要挂钩的应用程序的特权级别。键盘和其他挂钩具有很高的安全风险,因此Vista和更高版本被更改为只允许在共同的特定安全环境中进行全系统挂钩。换句话说,如果你用用户权限启动钩子主机进程,它将只钩住处于相同特权级别的进程。如果你仔细想想,这是有道理的,因为你不希望用户级进程能够将代码注入到管理级进程中。这在很多层面上都很糟糕。

相关问题