全局鼠标钩子突然没有被调用

时间:2012-09-13 07:34:42

标签: c# mouse hook

我的应用程序中有一个全局鼠标挂钩但是过了一段时间(在某些计算机上)鼠标挂钩程序(MouseHookProc)突然停止调用,我不知道为什么,我已经搜索了原因并且看起来像它与win7的LowLevelHooksTimeout

有关
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern IntPtr SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hMod, uint dwThreadId);

private void AddMouseHook()
{
    MouseHookProcedure = new User32.HookProc(MouseHookProc);
    hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProcedure, (IntPtr)null, 0);
}

修复似乎是在新线程中添加鼠标钩子但是如果我这样做那么鼠标钩子从一开始就没有被调用,我可以验证SetWindowsHookEx确实返回值> 0所以钩子被正确添加,但是再次如果从另一个线程添加,那么“MouseHookProc”甚至不会被调用一次,如果从主线程启动然后没有问题,但只是在一段时间后消失(主要是在我的鼠标进行了一些繁重的处理之后)在“MouseHookProc”不再被调用之后,它会倾向于冻结

ThreadStart ts = new ThreadStart(AddMouseHook);
Thread th = new Thread(ts);
th.Start();

0 个答案:

没有答案