一个关于鼠标钩子的问题

popy007 2005-03-22 03:59:05
各位大侠,

我用SetWindowsHookEx(WH_MOUSE, (HOOKPROC)MouseProc, g_hInstance, 0);

启动了一个鼠标钩子,它的过程函数如下:
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{

if (nCode < 0) // do not process the message
{
return CallNextHookEx(NULL, nCode, wParam, lParam);
}

if(wParam == WM_RBUTTONDOWN)
{
AfxMessageBox("RButton");
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
第一次启动程序后,点击鼠标右键弹出RButton对话框,然后我点击退出按钮通过

UnhookWindowsHookEx(g_hHookMouse);去掉钩子然后退出程序。 当我再次执行程序

点击鼠标右键后就不弹RButton对话框了,请问这是什么原因。如何解决?
...全文
164 12 打赏 收藏 举报
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
popy007 2005-03-23
而且我加载钩子的时候的操作是:

g_hHookMouse = SetWindowsHookEx(WH_MOUSE, (HOOKPROC)MouseProc, g_hInstance, 0);
if(!g_hHookMouse)
{
AfxMessageBox("SetWindowsHookEx() call failed");
}

每次启动都没有加载失败的提示。
  • 打赏
  • 举报
回复
popy007 2005-03-23
用进程互斥体或者线程技巧可否在.exe程序中实现全局钩子?

我看到一个win32 sdk的程序好像就没有用dll。
  • 打赏
  • 举报
回复
0011411 2005-03-23
在退出时要将钩子设置为初始状态
  • 打赏
  • 举报
回复
BigFanOfCpp 2005-03-23
把所有代码贴上来看看,
  • 打赏
  • 举报
回复
54gym 2005-03-22
FreeLibrary()
  • 打赏
  • 举报
回复
ldiqing 2005-03-22
在你退出的时候应该调用FreeLibrary()释放装载的动态链接库。
  • 打赏
  • 举报
回复
oyljerry 2005-03-22
全局钩子,用Dll来实现才能加载成功
  • 打赏
  • 举报
回复
adamx 2005-03-22
SetWindowsHookEx(WH_MOUSE, (HOOKPROC)MouseProc, g_hInstance, 0);
是全局钩子啊。
  • 打赏
  • 举报
回复
DentistryDoctor 2005-03-22
try WH_MOUSE_LL
应该是第二次未成功加载钩子。

hMod
[in] Handle to the DLL containing the hook procedure pointed to by the lpfn parameter. The hMod parameter must be set to NULL if the dwThreadId parameter specifies a thread created by the current process and if the hook procedure is within the code associated with the current process.

如果是全局钩子,钩子应该以DLL实现。。。
  • 打赏
  • 举报
回复
ww51xh 2005-03-22
一定是第二次没有加载到啊!
仔细看一下代码,确保钩子已经成功加载
  • 打赏
  • 举报
回复
Fzergling 2005-03-22
设个断点看下执行挂钩没有不就可以啦
  • 打赏
  • 举报
回复
相关推荐
发帖
进程/线程/DLL

1.5w+

社区成员

VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
帖子事件
创建了帖子
2005-03-22 03:59
社区公告
暂无公告