我正在开发一个简单的应用程序,它正在从操作系统读取击键。我使用 API“SetWindowsHookEx”来读取击键数据。
目前,数据由钩子读取并发送到操作系统或应用程序。
我想阻止这些数据进入操作系统或其他应用程序。使用“SetWindowsHookEx”读取数据后,有什么方法可以阻止数据进入 Windows 7 操作系统?
我正在开发一个简单的应用程序,它正在从操作系统读取击键。我使用 API“SetWindowsHookEx”来读取击键数据。
目前,数据由钩子读取并发送到操作系统或应用程序。
我想阻止这些数据进入操作系统或其他应用程序。使用“SetWindowsHookEx”读取数据后,有什么方法可以阻止数据进入 Windows 7 操作系统?
通常,为了防止任何消息移动到其目标,请不要从挂钩回调函数中调用 CallNextHookEx。默认情况下,挂钩回调调用 CallNextHookEx。
请小心使用此功能并仅停止某些特定消息。例如,有时调用此函数来禁用某些标准键,如 Alt+F4、Alt+Tab 等。
如果您使用的是“普通”键盘挂钩,您将在https://msdn.microsoft.com/en-us/ms644984.aspx上找到答案:
如果 code 小于零,则挂钩过程必须返回 CallNextHookEx 返回的值。
如果code大于等于0,并且hook过程没有处理消息,强烈建议调用CallNextHookEx并返回它返回的值;否则,其他安装了 WH_KEYBOARD 挂钩的应用程序将不会收到挂钩通知,因此可能会出现错误行为。如果钩子过程处理了消息,它可能会返回一个非零值,以防止系统将消息传递给钩子链的其余部分或目标窗口过程。
如果您使用的是低级键盘挂钩,则它写在https://msdn.microsoft.com/en-us/ms644985.aspx上:
如果 nCode 小于零,则挂钩过程必须返回 CallNextHookEx 返回的值。
如果nCode大于等于0,并且hook过程没有处理该消息,强烈建议调用CallNextHookEx并返回它返回的值;否则,其他已安装 WH_KEYBOARD_LL 挂钩的应用程序将不会收到挂钩通知,因此可能会出现错误行为。如果钩子过程处理了消息,它可能会返回一个非零值,以防止系统将消息传递给钩子链的其余部分或目标窗口过程。
概括:
如果你想截获一条消息——你不要调用 CallNextHookEx 并返回一个非零值,以防止它被传递到链中。