gpt4 book ai didi

c# - 全局低级键盘 Hook - Race Condition

转载 作者:行者123 更新时间:2023-11-30 17:58:41 25 4
gpt4 key购买 nike

我编写了一个 C# 应用程序,其中包含一个 WinAPI 低级键盘钩子(Hook),我用它来防止除字母数字键之外的所有键。

问题是 - 其他程序(那些在登录时启动的程序)也有键盘钩子(Hook)(用于启动计算器、浏览器等应用程序)。在我的钩子(Hook)回调到达之前,这些程序已经打开了这些应用程序,因此,我无法停止该操作。

有什么方法可以确保我的钩子(Hook)先于其他钩子(Hook)被调用吗?


编辑

消除混淆 - 我的应用程序是一个没有安装程序的可执行文件。它按需运行。

我需要能够接管其他 Hook - 或者只是强制首先调用我的 Hook 回调 - 即使其他人已经调用了 SetWindowsHookEx 方法。

最佳答案

虽然它没有回答如何以编程方式做到这一点,但如果我们从不同的角度来看它,可能会有一个可以接受的解决方案来解决您的特定问题......

去二手店买一个便宜的 USB 键盘,然后切断与您不想让儿子使用的键的连接怎么样?然后,您可以将 USB 连接到现有键盘的 USB 端口,并在您儿子演奏时将键盘推开。

当他完成后,断开您儿子的键盘并将您的键盘移回原位。

否则,我认为您可能需要安装 WH_DEBUG钩子(Hook)在键盘消息传递给任何其他钩子(Hook)之前获取键盘消息。

DebugProc function

The system calls this function before calling the hook proceduresassociated with any type of hook. The system passes information aboutthe hook to be called to the DebugProc hook procedure, which examinesthe information and determines whether to allow the hook to be called.

DebugProc 将通过 wParam 中调用的 Hook 类型(在您的情况下为 WH_KEYBOARD_LL)和 DEBUGHOOKINFO 传递给 DebugProc。 lParam 中的结构,其中包含将传递到 Hook 链的实际 WH_KEYBOARD_LL Hook 信息。

关于c# - 全局低级键盘 Hook - Race Condition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12011579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com