关于钩子函数的问题快疯了高手帮忙!!

kio123 2006-07-24 07:27:18
学校用的一款破软件(好像是pb编的),在右键弹出菜单里有一项很危险的操作,不小心点了以后没有任何提示就执行。想用vc自己写个软件(只会点vc),在点击到该项的时候能弹出提示或者干脆让他不执行,上网搜了半天也只找到能截获菜单弹出消息的,下面就不知道该怎么办了,高手可怜可怜我吧,我把分数都给你!!!
...全文
281 15 打赏 收藏 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
kio123 2006-07-27
  • 打赏
  • 举报
回复
通过实验用WH_CALLWNDPROC可以捕获wm_command消息了,但是wID:573这个条件怎么写啊
wParam==573吗,好像不行,怎么解决阿
LRESULT CALLBACK CallWndProc(
int nCode, // hook code
WPARAM wParam, // current-process flag
LPARAM lParam // message data
)
{
if(nCode<0) return CallNextHookEx(hhook,nCode,wParam,lParam);

CWPSTRUCT *p=(CWPSTRUCT*)lParam;
if(p->message==WM_COMMAND/*&&p->wParam==0x00000320*/)
::MessageBox(NULL,"123","123",MB_OK);
return CallNextHookEx(hhook,nCode,wParam,lParam);
}
ringphone 2006-07-27
  • 打赏
  • 举报
回复
PB写的程序能用VC打开看到其资源吗?如果可以的话把那菜单通过资源编辑改了就行了,删掉那个菜单项或变灰,也不用编程实现了。
kio123 2006-07-26
  • 打赏
  • 举报
回复
问题还没解决,大家快帮忙啊
kio123 2006-07-25
  • 打赏
  • 举报
回复
是编译好的程序没有源码
明天去抢劫 2006-07-25
  • 打赏
  • 举报
回复
屏弊那个菜单项向窗口发的消息
用Spy++查一下那个消息值
然后在WH_GETMESSAGE或WH_CALLWNDPROC的处理函数中屏弊
kio123 2006-07-25
  • 打赏
  • 举报
回复
iswjh大哥说的没错,现在我能截获菜单的消息了,但是我最终的目的是使弹出菜单上的一项失效或者出现对话框提示(比如点击关闭的时候弹出提示),现在只能是通过捕获WM_LBUTTONDOWN消息让所有选项都失效,代码还可以改进吗,我是这么写的
extern "C" LRESULT CALLBACK MessageProc(
int code, // hook code
WPARAM wParam, // not used
LPARAM lParam // message data
)
{

if(code<0) return CallNextHookEx(hhook,code,wParam,lParam);

if(code==MSGF_MENU)
{
MSG* lpmsg=(MSG*)lParam;
if (lpmsg->message==WM_LBUTTONDOWN)
......
}
return CallNextHookEx(hhook,code,wParam,lParam);
}
另外我新手,能不能告诉我怎么给各位加分啊
mynamelj 2006-07-25
  • 打赏
  • 举报
回复
直接在PB源码中改不就行了,PB也不难
kio123 2006-07-25
  • 打赏
  • 举报
回复
我用spy++捕获那个消息是WM_COMMAND消息,wID:573
是不是这样写就行了
extern "C" LRESULT CALLBACK GetMsgProc(
int code, // hook code
WPARAM wParam, // removal option
LPARAM lParam // message
)
{

if(code<0) return CallNextHookEx(hhook,code,wParam,lParam);

if(code==PM_NOREMOVE)
{

if (lParam==573)
......
}
return CallNextHookEx(hhook,code,wParam,lParam);
}
iswjh 2006-07-24
  • 打赏
  • 举报
回复
接上:
这个钩子是用来截获menu输入事件的,包括WM_MOUSEMOVE,WM_LBUTTONDOWN等消息。详见MSDN.
iswjh 2006-07-24
  • 打赏
  • 举报
回复
使用WH_MSGFILTER

static HHOOK hmsgfilter=NULL;
LRESULT CALLBACK InputEvent_msgfilter(int code,WPARAM wParam,LPARAM lParam)
{
if(code==MSGF_MENU)
{
MSG* lpmsg=(MSG*)lParam;

}
return CallNextHookEx(hmsgfilter,code,wParam,lParam);
}
KeSummer 2006-07-24
  • 打赏
  • 举报
回复
屏蔽掉右键消息啊.
kio123 2006-07-24
  • 打赏
  • 举报
回复
嗯我在补充一下,是类似机房管理系统的软件,在主机端如果不小心点到右键弹出菜单上的选项,客户端就全关机或者重起之类的操作,如果能阻止他向外发消息也行。但是也不能影响其他正常的功能
KeSummer 2006-07-24
  • 打赏
  • 举报
回复
写个DLL伴随它启动(用detours可以实现),然后对它的主窗口(应该有吧)进行子类化,拦截鼠标右键消息.
kio123 2006-07-24
  • 打赏
  • 举报
回复
没有
大熊猫侯佩 2006-07-24
  • 打赏
  • 举报
回复
有没有弹出对话框或任何提示?

16,550

社区成员

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

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

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