C# 全局鼠标钩子突然不被调用
我的应用程序中有一个全局鼠标钩子,但是(在某些计算机上)鼠标钩子过程(MouseHookProc)突然停止调用后,我不知道为什么,我已经搜索了原因,似乎与win7的低级别钩子有关C# 全局鼠标钩子突然不被调用,c#,mouse,hook,C#,Mouse,Hook,我的应用程序中有一个全局鼠标钩子,但是(在某些计算机上)鼠标钩子过程(MouseHookProc)突然停止调用后,我不知道为什么,我已经搜索了原因,似乎与win7的低级别钩子有关 [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] internal static extern IntPtr SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hMod, ui
[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();
本博客展示了如何在一个新线程中执行/启动鼠标钩子,尽管这样做之后,鼠标在任何时间点冻结后,鼠标钩子过程仍然停止被调用:-(本博客展示了如何在一个新线程中执行/启动鼠标钩子,尽管这样做之后,鼠标在任何时间点冻结后,鼠标钩子过程仍然停止被调用:-(