全球低级键盘钩 - 比赛条件

时间:2012-08-17 18:52:54

标签: c# .net winapi keyboard-hook

我编写了一个包含WinAPI低级键盘钩子的c#应用程序,我用它来阻止所有字母数字键。

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

有没有办法确保我的钩子在其他人之前被调用?


修改

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

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

2 个答案:

答案 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]