我的代码几年来一直没有任何报告问题。它设置了一个低级键盘钩子,用户可以使用它来激活应用程序。
m_hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeybHookFn, GetModuleHandle(NULL), 0);
对于一个突然的用户(它之前也为他工作多年),键盘挂钩不工作。经过调查,我可以看到SetWindowsHookEx()返回NULL并且GetLastError()返回 0x00000597 ,这是 ERROR_HOOK_NOT_INSTALLED 。
我找不到任何关于这意味着什么的文件。
为什么会发生这种情况的可能性有多大?系统安全设置?用户帐户权限?用户正在使用Windows 7。
我需要一个具体的答案来解决如何解决用户的问题
答案 0 :(得分:1)
查看http://blogs.msdn.com/b/alejacma/archive/2010/10/14/global-hooks-getting-lost-on-windows-7.aspx,如果CPU负载很高,可能会出现这种情况。
另一个想法:升级到64位窗口时这会破坏吗?我不知道是否适用于LL挂钩,但是你不能在64位进程中注入32位DLL。
最后:如果未从UAC升级的进程安装挂钩(低级权限级别进程无法捕获更高权限级别1的输入),则LL钩子不会在UAC提升的进程中捕获输入