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);
}
//---------------------------------------------------------------------------

...全文
666 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
老哥你这样给分实在叫兄弟心寒啊...呵呵

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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