最近再看一些关于Hook方面的知识,这是一个线程钩子的实例(来源互联网):
步骤:
一、新建一个不使用文档/视结构的单文档应用hook1。打开childview.cpp文件,加入全局变量:
[cpp]HHOOK hHook;//鼠标钩子句柄
CPoint point;//鼠标位置信息
CChildView *pView;//鼠标钩子函数用到的输出窗口指针 [/cpp]
二、在CChildView::OnPaint()添加如下代码:
[cpp]CPaintDC dc(this); // 用于绘制的设备上下文
CString str;
str.Format(_T(“x=%d,y=%d by:cplusplus.me”),point.x,point.y);
dc.TextOut(200,200,str); //显示字符串[/cpp]
三、在childview.cpp文件中定义全局的鼠标钩子函数。
[cpp]LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{//是鼠标移动消息
if(wParam==WM_MOUSEMOVE||wParam
==WM_NCMOUSEMOVE)
{
point=((MOUSEHOOKSTRUCT *)lParam)->pt;
//取鼠标信息
pView->Invalidate(); //窗口重画
}
return CallNextHookEx(hHook,nCode,wParam,lParam);
//传递钩子信息
}
[/cpp]
四、CChildView类的构造函数中安装钩子。
[cpp]pView=this;//获得输出窗口指针
hHook=SetWindowsHookEx(WH_MOUSE,MouseProc,0,GetCurrentThreadId()); [/cpp]
五、CChildView类的析构函数中卸载钩子。
[cpp]if(hHook)
UnhookWindowsHookEx(hHook); [/cpp]
运行结果:
hook1
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/35065.html