似乎Windows 7(某些人还说Windows Vista)强制限制挂钩通过SetWindowsHookEx
的次数。在Windows 7中增加SetWindowsHookEx限制
我正在编写一个Java应用程序并使用jnativehook将键盘和鼠标挂接到系统(以便跟踪它们在应用程序之外的活动)。问题是,经过大约100次这样做后,挂钩程序停止工作 - 默默(没有例外抛出)。
import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
static void listenerInit() throws NativeHookException {
GlobalScreen.registerNativeHook();
// add listeners
}
我试图寻找解决增加此限制,这样我就不需要保留重启计算机,以便往往只是复位计数器。我到目前为止的建议是add a registry key将超时时间增加到10秒,但这听起来不对。
HKEY_CURRENT_USER\Control Panel\Desktop\
LowLevelHooksTimeout=10000
// why do this?
显然,对于this is not ideal因为它是使用钩缓应用面向用户的解决方法的开发人员。但我只是通过终止它并反复运行来测试应用程序。在部署的环境中,它只会在启动时运行一次。 这是否适合我的测试系统?
如何增加此限制?此外,我不明白超时值与达到限制后无法创建更多新挂钩的原因之间的关系。
请注意,我只对基于Java的解决方案或涉及修改测试系统操作系统配置(Windows 7 Professional)的解决方案感兴趣。我见过一些建议,涉及编写一些我不感兴趣的C++或C#库。
此外,如果我升级到Windows 10,这会解决吗?
FWIW我发现,注销并重新登录将重置计数器,尽管切换用户似乎并没有帮助(我只试图切换回同一个帐户,没有尝试切换到不同的帐户)。虽然仍然很麻烦,但注销/打开比完全重新启动要快。 – ADTC