windows - Vista 及更高版本上的系统范围键盘钩子(Hook)

标签 windows delphi keyboard-hook

我创建了一个系统范围的键盘 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/

相关文章:

windows - 试图更换;使用 cmd 文件在 txt 文件中使用 ASCII 控制字符

delphi - 如何在自定义delphi组件中实现字符串列表属性?

c++ - Hook 键盘以更改键码

delphi - Firedac ODBC 和 Ingres 数据库 - "API function cannot be called in the current state"

vb.net - 键盘 Hook ,防止键盘输入到应用程序

keyboard-shortcuts - Adobe AIR 键盘 Hook

c - Linux 与 Windows 性能对比

c++ - 移植到windows时程序崩溃

C++互斥锁定线程优先级

Delphi Indy - 如何为 Indy 10 的 SSL-TCP 客户端/服务器链接获取 SSL 证书