API:SetWindowsHookEx钩子偶尔不能执行
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelMouseProc lpfn, IntPtr hMod, uint dwThreadId);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
private IntPtr SetHook(LowLevelMouseProc proc)
{
try
{
using (Process curProcess = Process.GetCurrentProcess())
using (ProcessModule curModule = curProcess.MainModule)
{
_proc = HookCallback;
return SetWindowsHookEx(WH_MOUSE_LL, _proc, GetModuleHandle(curModule.ModuleName), 0);
}
}
catch (Exception ex)
{
WriteLog.WriteLogPack("SetHook***********" + ex.Message);
MessageBox.Show(ex.Message);
return (IntPtr)0;
}
}
private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
try
{
if (nCode >= 0 && MouseMessages.WM_MOUSEMOVE == (MouseMessages)wParam)
{
//把参数lParam在内存中指向的数据转换为MSLLHOOKSTRUCT结构
_hookStruct = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
catch (Exception ex)
{
WriteLog.WriteLogPack("HookCallback***********" + ex.Message);
MessageBox.Show(ex.Message);
return (IntPtr)0;
}
}
HookCallback回调函数执行一段时间,大概10-15分钟左右,此回调函数就不进入了。既不报异常信息也无错误日志。不太清楚这个问题出现的原因,请大神解答。