钩子高手请进!

mengxihe 2003-07-30 10:43:32
LRESULT WINAPI MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HC_ACTION && wParam == WM_RBUTTONDOWN)
{
PMOUSEHOOKSTRUCT pInfo = (PMOUSEHOOKSTRUCT)lParam;
::SendMessage(pInfo->hwnd,WM_RMOUSE,0,NULL);
return 1;
}
else
return CallNextHookEx(CMouseHook::m_hHook, nCode, wParam, lParam);
}

WM_RMOUSE是自定义消息,为什么pInfo->hwnd的窗口收不到这个消息?
或者有什么别的方法可以解决这个问题(主要是屏蔽控件的右键菜单,又要让窗体知道右键消息)?????
...全文
36 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
loopyifly 2003-07-30
  • 打赏
  • 举报
回复
...
清泉ys 2003-07-30
  • 打赏
  • 举报
回复
上面的代码应该没问题
你初始化时是不是这样SetWindowsHookEx
hmousehook = ::SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId());
nonocast 2003-07-30
  • 打赏
  • 举报
回复
1判断程序是否执行此条语句。很简单,设断点。如果成功则证明不是HOOK的问题。
2判断消息是否发送。可另开一个程序,用FindWindow()取得目标窗口的HWND,然后通过它的句柄发消息给它,看目标窗口是否接收到此条消息。同样通过设断点。如果成功的话,说明消息发送这块也没问题,不行的话说明问题出在消息上。
说明一下,我不知道pInfo->hwnd你是怎么取到的,不过你可以通过Watch窗口看一下通过FindWindow找到的HWND和你的pInfo->hwnd是否相同。如果不一样说明的问题就在pInfo->hwnd。
nonocast 2003-07-30
  • 打赏
  • 举报
回复
1判断程序是否执行此条语句。很简单,设断点。如果成功则证明不是HOOK的问题。
2判断消息是否发送。可另开一个程序,用FindWindow()取得目标窗口的HWND,然后通过它的句柄发消息给它,看目标窗口是否接收到此条消息。同样通过设断点。如果成功的话,说明消息发送这块也没问题,不行的话说明问题出在消息上。
说明一下,我不知道pInfo->hwnd你是怎么取到的,不过你可以通过Watch窗口看一下通过FindWindow找到的HWND和你的pInfo->hwnd是否相同。如果不一样说明的问题就在pInfo->hwnd。
bager 2003-07-30
  • 打赏
  • 举报
回复
钩子用法没错,你可能将WM_RMOUSE发到控件上的某个子窗体上了。
你可以做如下尝试:

//::SendMessage(pInfo->hwnd,WM_RMOUSE,0,NULL);
1、声明全局变量,保存控件窗体句柄
HWND g_hWndCurrent;
2、在控件初始化时,对g_hWndCurrent赋值
//...
g_hWndCurrent = m_hWnd;
//...

3、修改你的MouseProc函数中SendMessage语句
LRESULT WINAPI MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode >= 0 && wParam == WM_RBUTTONDOWN)
{
PMOUSEHOOKSTRUCT pInfo = (PMOUSEHOOKSTRUCT)lParam;
::SendMessage(g_hWndCurrent,WM_RMOUSE,0,NULL);
return 1;
}
else
return CallNextHookEx(g_hHookMouse, nCode, wParam, lParam);
}

//>>"主要是屏蔽控件的右键菜单,又要让窗体知道右键消息"
// 你的需求我已经在其它程序中模拟实现,如需要请留下MAIL

mfc168 2003-07-30
  • 打赏
  • 举报
回复
gz
wangweintk 2003-07-30
  • 打赏
  • 举报
回复
应该是没有问题的。
wangweintk 2003-07-30
  • 打赏
  • 举报
回复
调试确定一下,消息是不是发送了。

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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