一个消息钩子问题。我怎么勾不到我想要的消息呢?代码如下,高手请指点!

happydeer
领域专家: 前端开发技术领域
2001-05-24 12:18:00
#pragma data_seg("HKDATA")
HHOOK g_hHook=NULL;
int g_nTranslateMode=0;
#pragma data_seg()

HWND m_hMain = NULL;

#pragma comment(linker, "/SECTION:HKDATA,RWS")


LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode == HC_ACTION)
{
CWPSTRUCT * pcw = reinterpret_cast<CWPSTRUCT *>(lParam);
if (pcw->hwnd == m_hMain)
{
FILE *fp= fopen("hookmsg.txt","a");
fprintf(fp,"Message: %d\n",pcw->message);
fclose(fp);
}
if(pcw->message == WM_RBUTTONDOWN)
{
::MessageBeep(MB_ICONEXCLAMATION);
::MessageBox(NULL,"Right mouse button clicked","Message hook test",MB_OK);
}
}
return ::CallNextHookEx(g_hHook, nCode, wParam, lParam);
}

BOOL HookOn(HWND hTarget)
{
if (g_hHook != NULL)
return TRUE;
if (m_hMain == NULL)
m_hMain = hTarget;
g_hHook = ::SetWindowsHookEx(WH_CALLWNDPROC, HookProc,theApp.m_hInstance, 0);
return (g_hHook!=NULL);
}

BOOL HookOff(void)
{
if(g_hHook == NULL)
return TRUE;
BOOL bRet = ::UnhookWindowsHookEx(g_hHook);
g_hHook=NULL;
return bRet;
}

我做一个SDI测试程序,但是在文件中记录的消息是WM_NCHITTEST WM_SETCURSOR WM_KILLFOCUS WM_IME_SETCONTEXT WM_DESTROY WM_NVDESTROY
就是没有我要的WM_RBUTTONDOWN!!!请问这是怎么回事?
...全文
201 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
fzzzf 2001-05-31
  • 打赏
  • 举报
回复
全局钩子的dll并不一定要放在系统目录里面,因为它会按照一定的路径去寻找!
happydeer 2001-05-30
  • 打赏
  • 举报
回复
happydeer 2001-05-30
  • 打赏
  • 举报
回复
加分啦!
happydeer 2001-05-30
  • 打赏
  • 举报
回复
还有一个问题:全局钩子的dll一定要放在系统目录里面吗?
我只把它放在可执行文件当前目录,照样是全局响应的。高手说明一下吧,谢谢!
happydeer 2001-05-30
  • 打赏
  • 举报
回复
我试过了,WH_GETMESSAGE能行的,构住了我的鼠标消息。

但是,好像WH_GETMESSAGE只能构住寄送消息,而WH_CALLWNDPROC只能构住
SendMessage发送的消息。有没有一种钩子能钩住所有消息。

大家快来看看,我会加分的!
三杯倒 2001-05-30
  • 打赏
  • 举报
回复
同意楼上的意见,使用WH_GETMESSAGE这种钩子
happydeer 2001-05-30
  • 打赏
  • 举报
回复
谢谢,我试试,成功了给你加分!
三杯倒 2001-05-30
  • 打赏
  • 举报
回复
据说,这种情况需要多种钩子综合运用
happydeer 2001-05-25
  • 打赏
  • 举报
回复
我就是想用消息钩子试验一下。
wm_lbutton消息好象也没有构到!
dave75 2001-05-25
  • 打赏
  • 举报
回复
gz
yato 2001-05-25
  • 打赏
  • 举报
回复
为什么不用鼠标钩子呢?
Jim_Hu 2001-05-25
  • 打赏
  • 举报
回复
有沒有wm_lbutton?
happydeer 2001-05-25
  • 打赏
  • 举报
回复
我推一下!
rich_lee 2001-05-25
  • 打赏
  • 举报
回复
WH_CALLWNDPROC类型钩子只能钩到用SendMessage发送的消息
用WH_GETMESSAGE类型钩子就没有问题了。
zyx 2001-05-25
  • 打赏
  • 举报
回复
WH_CALLWNDPROC好像只能钩到用SendMessage发送的消息。
如果消息不是用SendMessage发送的,这个钩子可能钩不到

以上只是个人的理解
happydeer 2001-05-25
  • 打赏
  • 举报
回复
就没人知道吗?高手到哪儿去了?
happydeer 2001-05-24
  • 打赏
  • 举报
回复
谁能回答我吗?
happydeer 2001-05-24
  • 打赏
  • 举报
回复
A
happydeer 2001-05-24
  • 打赏
  • 举报
回复
没人回答我吗?
happydeer 2001-05-24
  • 打赏
  • 举报
回复
我推一下!
加载更多回复(1)

16,550

社区成员

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

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

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