Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 全局鼠标钩子突然不被调用_C#_Mouse_Hook - Fatal编程技术网

C# 全局鼠标钩子突然不被调用

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

我的应用程序中有一个全局鼠标钩子,但是(在某些计算机上)鼠标钩子过程(MouseHookProc)突然停止调用后,我不知道为什么,我已经搜索了原因,似乎与win7的低级别钩子有关

[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();

本博客展示了如何在一个新线程中执行/启动鼠标钩子,尽管这样做之后,鼠标在任何时间点冻结后,鼠标钩子过程仍然停止被调用:-(本博客展示了如何在一个新线程中执行/启动鼠标钩子,尽管这样做之后,鼠标在任何时间点冻结后,鼠标钩子过程仍然停止被调用:-(