2

我的应用程序中有一个全局鼠标钩子,但一段时间后(在某些计算机上)鼠标钩子程序(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();
4

0 回答 0