我编写了一个包含WinAPI低级键盘钩子的c#应用程序,我用它来阻止所有字母数字键。
问题是 - 其他程序(在登录时启动的程序)也有键盘挂钩(启动计算器,浏览器等应用程序)。在我的钩子回调到达之前,这些程序已经打开了这些应用程序,因此,我无法停止操作。
有没有办法确保我的钩子在其他人之前被调用?
修改
清除混淆 - 我的应用程序是一个没有安装程序的可执行文件。它按需运行。
我需要能够接管其他钩子 - 或者只是强制首先调用我的钩子回调 - 尽管其他人已经调用了SetWindowsHookEx
方法。
答案 0 :(得分:1)
虽然它没有以编程的方式回答如何做到这一点,但如果我们从不同的角度来看待你的具体问题,可能会有一个可接受的解决方案......
去二手商店,买一个便宜的USB键盘,然后剪断你不想让你的儿子使用的钥匙的连接怎么样?然后,您可以将USB连接到现有键盘的USB端口,只需在儿子玩耍时将键盘推开即可。
完成后,断开儿子的键盘并将其移回原位。
否则,我认为您可能需要安装WH_DEBUG挂钩以获取键盘消息,然后才能将其传递给任何其他挂钩。
DebugProc功能
系统在调用挂钩程序之前调用此函数 与任何类型的钩子相关联。系统传递有关的信息 要调用DebugProc钩子过程的钩子 信息并确定是否允许调用钩子。
DebugProc将传递在wParam中调用的钩子类型(在您的情况下为WH_KEYBOARD_LL),以及lParam中的DEBUGHOOKINFO结构,其中包含将传递给钩子链的实际WH_KEYBOARD_LL钩子信息。 / p>
答案 1 :(得分:0)
您无法使用安装程序编辑
[HKEY_CURRENT_USER \ SOFTWARE \微软\的Windows \ CurrentVersion \运行]
注册表值?我没有明确地试图完成你正在尝试做的事情......我不确定你是否可以从安装程序重新排序这些键值,但这应该足够早地抓住它......
或者其中一个: [HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \运行] [HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \的RunOnce] [HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \ RunServices] [HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \ RunServicesOnce] [HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon \ Userinit]