想要在使用 SetWindowsHookEx 读取后停止数据进入操作系统/应用程序
Posted
技术标签:
【中文标题】想要在使用 SetWindowsHookEx 读取后停止数据进入操作系统/应用程序【英文标题】:Want to stop the data going into OS/application after read using SetWindowsHookEx 【发布时间】:2011-10-03 14:34:36 【问题描述】:我正在开发一个从操作系统读取击键的简单应用程序。我使用 API "SetWindowsHookEx" 来读取击键数据。
目前,数据被钩子读取并发送到操作系统或应用程序。
我想阻止这些数据进入操作系统或其他应用程序。使用“SetWindowsHookEx”读取数据后,有什么方法可以阻止数据进入 Windows 7 操作系统?
【问题讨论】:
【参考方案1】:一般来说,为了防止任何消息被发送到它的目标,不要从钩子回调函数中调用 CallNextHookEx。默认情况下,hook 回调调用 CallNextHookEx。
请谨慎使用此功能,并仅停止某些特定消息。例如,有时调用此函数来禁用某些标准键,如 Alt+F4、Alt+Tab 等。
【讨论】:
【参考方案2】:如果您使用的是“普通”键盘挂钩,您将在 https://msdn.microsoft.com/en-us/ms644984.aspx 上找到答案:
如果代码小于零,钩子过程必须返回值 由 CallNextHookEx 返回。
如果代码大于或等于零,并且钩子程序执行了 不处理消息,强烈建议您致电 CallNextHookEx 并返回它返回的值;否则,其他 已安装 WH_KEYBOARD 挂钩的应用程序将不会收到 挂钩通知,因此可能会导致行为不正确。如果钩 程序处理了消息,它可能会返回一个非零值 防止系统将消息传递给钩子的其余部分 链或目标窗口过程。
如果你使用的是低级键盘钩子,它写在https://msdn.microsoft.com/en-us/ms644985.aspx:
如果 nCode 小于零,钩子过程必须返回值 由 CallNextHookEx 返回。
如果 nCode 大于或等于 0,并且钩子程序执行了 不处理消息,强烈建议您致电 CallNextHookEx 并返回它返回的值;否则,其他 已安装 WH_KEYBOARD_LL 挂钩的应用程序将不会收到 挂钩通知,因此可能会导致行为不正确。如果钩 程序处理了消息,它可能会返回一个非零值 防止系统将消息传递给钩子的其余部分 链或目标窗口过程。
总结:
如果你想拦截一条消息 - 千万不要调用 CallNextHookEx 并返回一个非零值以防止它被传递到链中。
【讨论】:
以上是关于想要在使用 SetWindowsHookEx 读取后停止数据进入操作系统/应用程序的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Borland C++ Builder 中使用 SetWindowsHookEx 和 LowLevelKeyboardProc
在我的线程上下文中调用“SetWindowsHookEx”函数