API:SetWindowsHookEx钩子偶尔不能执行

weixin_38049686 2017-12-05 08:24:44
[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分钟左右,此回调函数就不进入了。既不报异常信息也无错误日志。不太清楚这个问题出现的原因,请大神解答。
...全文
15 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复

476

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧