我编写了一个c#应用程序,其中包含一个WinAPI低级别键盘挂钩,用于防止除字母数字键以外的所有键。
问题是-其他程序(从登录开始)也有键盘挂钩(用于启动应用程序,如计算器、浏览器等)。这些程序已经打开了这些应用程序之前,我的钩子回调已经达到,因此,我没有办法停止行动。
有什么办法确保我的钩子在别人之前就被调用了吗?
编辑
为了消除混乱-我的应用程序是一个没有安装程序的单个可执行文件。它是按需运行的。
我需要能够接管其他钩子--或者只是强制首先调用我的钩子回调--尽管其他人已经调用了SetWindowsHookEx方法。
发布于 2012-08-17 21:43:03
虽然它不能回答如何用程序的方式来做它,但是如果我们从不同的角度来解决你的具体问题,可能会有一个可以接受的解决方案。
去一家二手商店,买一个廉价的USB键盘,然后切断连接到你不想让你的儿子使用的钥匙的连接,怎么样?然后你可以把USB连接到你现有键盘的USB端口上,然后在你儿子玩的时候把你的键盘推开。
当他完成时,断开你儿子的键盘,把你的键盘移回原处。
否则,我认为您可能需要安装调试钩子来获取键盘消息之前传递给任何其他钩子。
DebugProc函数 系统在调用与任何类型钩子相关的钩子过程之前调用此函数。系统将有关要调用的钩子的信息传递给DebugProc钩子过程,该过程检查信息并确定是否允许调用钩子。
DebugProc将被传递wParam中调用的钩子类型(在您的示例中是WH_KEYBOARD_LL ),以及lParam中的一个DEBUGHOOKINFO结构,其中包含传递给钩子链的实际WH_KEYBOARD_LL钩子信息。
发布于 2012-08-17 19:07:46
不能使用安装程序来编辑
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
注册表值?我从来没有明确地试图做你想要做的事.我不确定您是否可以从安装程序中重新排序这些键值,但是这应该足够早地捕捉到.
或其中之一: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
https://stackoverflow.com/questions/12011579
复制相似问题