线程专用钩子和全局钩子的区别和作用?

duhaohao 2000-04-13 11:32:00
线程专用钩子和全局钩子的区别和作用?
键盘HOOK怎样实现????
...全文
701 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
kkttcsd 2001-05-12
  • 打赏
  • 举报
回复
真是感激不尽,我也正想了解.
duhaohao 2000-05-26
  • 打赏
  • 举报
回复
高手的详细解释???????
lu0 2000-05-26
  • 打赏
  • 举报
回复
消息队列是以线程为基础的.一个局部HOOK勾挂的是一个进程内所有线程的消息.
此类实现由于不设计进程CONTEXT切换,是轻量极的HOOK.全局的HOOK会映射到所有加载
USER32.DLL的进程中.其实是USER32.DLL为这些进程调用LOADLIBRARY来加载HOOK所在的
DLL.并且在所有的消息在被送到消息处理前先调用HOOKPROC.当HOOKPROC决定该消息已经被处理完毕,那么就从线程消息队列里去除该消息.HOOKPROC本身的调用按照被加载的先后次序从后到前备调用.就象DOS时代的TSR拦截INT21H一样.是属于LIFO性质的.
似乎能够讲的就这么点乐.

http://lu0.126.com
royluo 2000-05-26
  • 打赏
  • 举报
回复
我觉得windmiiq兄已经解释的够详细了
其实就是全局和局部的区别
如果可以用线程Hook实现就最好用线程Hook
因为Hook技术用的不好会大大降低整个Windows系统的性能
这也是为什么WinCE不支持HOOK的原因了
至于键盘HOOK用SetWindowsHookEx带WH_KEYBOARD参数就可以了
比如你做一个全局的键盘HOOK,这样不管当前激活的应用程序是什么
只要有键盘消息,windows都会先问问你的Hook Proc,
“老第,这个键如何啊?”
完了你的Hook Proc拿过来左看右看,
最后说
“哎呀,我不要这个键,还给你”
你说累不累啊。
sean 2000-04-20
  • 打赏
  • 举报
回复
线程专用钩子和全局钩子的区别和作用?
有没有人做一些详细解释?
simon_sun 2000-04-20
  • 打赏
  • 举报
回复
以下为一个键盘钩子的主要的处理函数实现,原本是在dll中实现的,现将其提取以供参考,可以创建一个基于对话框的应用,在其中调用InstallKeyboardHook安装钩子,然后运行其他应用使用F10键,则可看到效果,最后在自己的应用中调用DeInstallKeyboardHook卸除钩子。

HINSTANCE ghInstance=0;
HOOKPROC glpfnHookProc=0;
LRESULT KbdHookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
BOOL bHandledKeystroke=false;
if(((DWORD)lParam&0x40000000)&&(HC_ACTION==nCode))
{
switch(wParam)
{
case VK_F10:
AfxMessageBox("F10");
bHandledKeystroke=true;
break;
default:
break;
}
}
return (bHandledKeystroke?true:
::CallNextHookEx(ghKeyHook,nCode,wParam,lParam));
}
//hWnd为调用程序的窗口句柄
BOOL InstallKeyboardHook(HWND hWnd)
{
ghInstance=AfxGetInstanceHandle();
BOOL bSuccess=false;
if(!ghKeyHook)
{
ghWndMain=hWnd;
glpfnHookProc=(HOOKPROC)KbdHookProc;
bSuccess=(NULL!=(ghKeyHook=::SetWindowsHookEx (WH_KEYBOARD,glpfnHookProc,
ghInstance,NULL)));
}
return bSuccess;
}

BOOL DeInstallKeyboardHook()
{
if(ghKeyHook)
{
if(true==(0!=::UnhookWindowsHookEx(ghKeyHook)))
ghKeyHook=NULL;
}
return (NULL==ghKeyHook);
}
windmiiq 2000-04-20
  • 打赏
  • 举报
回复
我只知道线程专用钩子只能钩到本线程的相关消息,而全局钩子可以钩到整个系统的相
关消息。不过不久前我刚好做过类似程序。如果你需要,我可以寄给你。
duhaohao 2000-04-20
  • 打赏
  • 举报
回复
谁告诉我???
weikeming 2000-04-14
  • 打赏
  • 举报
回复
杜哥,我爱莫能助...

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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