WH_JOURNALRECORD钩子和WH_GETMESSAGE钩子不能截断消息吗?

sw0324 2001-03-22 09:51:00
我试了一下WH_JOURNALRECORD钩子和WH_GETMESSAGE钩子我发现
这两个钩子只能监听键盘和鼠标消息,不能截断消息.用return 1来代替
return CallNextHookEx(...)也不行.可看书上介绍好像可以.附上我的
WH_JOURNALRECORD钩子源码,请你指教.

//------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (g_hLogHook==NULL)
g_hLogHook = SetWindowsHookEx(WH_JOURNALRECORD,(HOOKPROC)JournalLogProc,HInstance,0); //安装日志钩子
}
//------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if (g_hLogHook!=NULL)
{
UnhookWindowsHookEx(g_hLogHook);
g_hLogHook=NULL;
} //卸载日志钩子
}
//---------------------------------------------------------------------------
LRESULT CALLBACK JournalLogProc(int iCode,WPARAM wParam, LPARAM lParam)
{

if (iCode<0) return CallNextHookEx(g_hLogHook,iCode,wParam,lParam);
if (iCode==HC_ACTION) {
EVENTMSG *pEvt=(EVENTMSG *)lParam;
if (pEvt->message==WM_KEYDOWN){
int vKey;
MessageBeep(-1);
vKey=LOBYTE(pEvt->paramL); // 取得虚拟键值
Form1->Edit1->Text=vKey;
if(vKey==91||vKey==92) return 1;//我的本意是截断左右两个windows键.不好使!
}
}
return CallNextHookEx(g_hLogHook,iCode,wParam,lParam);
}
//---------------------------------------------------------------------------

...全文
605 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
NowCan 2001-03-26
日志钩子不需要放在DLL中,它只有全局这一种。
回复
xrbeck 2001-03-26
我试了试。可以。不过我是针对一个窗口来实验的。
代码在http://www.csdn.net/expert/Topic/88/88663.shtm
回复
xrbeck 2001-03-24
恩。。你稍微等等。我现在手头有点事。
等我试试在发给你。
回复
xrbeck 2001-03-24
另外。截获消息就用WH_GETMESSAGE。
在回调函数中返回一个MSG消息结构。
抓下来就行了。
回复
xrbeck 2001-03-24
to sw0324(sw0324):
日志钩子我虽然没用过。可是如果是全局钩子的话。
要放在DLL中啊。你怎么能放在主程序中呢。
你要另开一个DLL。然后把这些SETWINOWHOOK等的代码放在DLL中。

回复
sw0324 2001-03-24
to xrbeck(xiaozi):
首先谢谢你的关注!
用WH_GETMESSAGE钩子我试了,不行。不知你试了没有?
回复
sw0324 2001-03-23
to windoze(瞌睡窗):
GetMsgHook?怎样用? 能否给我例子。谢谢!
回复
holyfire 2001-03-23
look
回复
xrbeck 2001-03-23
to sw0234:
诶.老哥我发现一点问题.你这句话:
SetWindowsHookEx(WH_JOURNALRECORD,(HOOKPROC)JournalLogProc,HInstance,0);
最后一个参数为0.就是全局钩子啊.你怎么能放在主程序中呢.
要放在DLL中让别人来CALL啊.
回复
windoze 2001-03-23
JournalHook不能截断消息,只能做附加处理,GetMsgHook可以截断消息,而且可以修改消息。
回复
sw0324 2001-03-23
to xrbeck(xiaozi):
你说的不对,WH_JOURNALRECORD钩子是全局钩子。
你如果帮我解决了我给你200分,可是如果解决不了的话我就把200分给仍这了。
所以先给50分,解决后再加分。
再问:截断消息(键盘和鼠标消息除外)用什么钩子函数!最好有例子。
回复
xrbeck 2001-03-23
你不是写好了吗.你把0改成GetCurrentThreadId就可以啊..
还有关于问题:http://www.csdn.net/expert/Topic/86/86920.shtm
老哥你这样给分实在叫兄弟心寒啊...呵呵
回复
相关推荐
发帖
C++ Builder
创建于2007-08-02

1.3w+

社区成员

C++ Builder相关内容讨论区
申请成为版主
帖子事件
创建了帖子
2001-03-22 09:51
社区公告
暂无公告