- 浏览: 14094 次
最新评论
钩子程序解释说明都要注意小心钩子哦
2010年11月27日
钩子能截获系统并得理发送给其它应用程序的消息,能完成一般程序无法完成的功能。掌握钩子的编程方法是很有必要的
钩子分类 :
1、WH_CALLWNDPROC和WH_CALLWNDPROCRET: 使你可以监视发送到窗口过程的消息
3、WH_DEBUG 调试钩子
4、WH_FOREGROUNDIDLE 当当应用程序的前台线程大概要变成空闲状态时,系统就会调用 WH_FOREGROUNDIDL
5、WH_JOURNALRECORD 监视和记录输入事件
6、WH_JOURNALPLAYBACK 回放用WH_JOURNALRECORD记录事件
7、WH_KEYBOARD 键盘钩子
9、WH_KEYBOARD_LL 低层键盘钩子
10、WH_MOUSE 鼠标钩子
11、WH_MOUSE_LL 底层鼠标钩子
12、WH_SHELL 外壳钩子
13、WH_MSGFILTER 和 WH_SYSMSGFILTER 使我们可以监视菜单,滚动条,消息框等
安装钩子:
调用函数SetWindowsHookEx安装钩子。其函数原型为:
HHOOK SetWindowsHookEx( int idHook,HOOKPROC lpfn, INSTANCE hMod,DWORD dwThreadId )
idHook表示钩子类型,它是和钩子函数类型一一对应的。如,WH_KEYBOARD,WH_MOUSE。
Lpfn是钩子函数的地址。
HMod是钩子函数所在的实例的句柄。对于线程钩子,该参数为NULL;对于系统钩子,该参数为钩子函数所在的DLL句柄。 (系统钩子必须在DLL中)
dwThreadId 指定钩子所监视的线程的线程号。对于全局钩子,该参数为NULL。
SetWindowsHookEx返回所安装的钩子句柄。
卸载钩子
调用函数 BOOL UnhookWindowsHookEx( HHOOK hhk)卸载钩子
定义钩子函数
钩子函数是一种特殊的回调函数。钩子监视的特定事件发生后,系统会调用钩子函数进行处理。一般为下:
LRESULT WINAPI MyHookProc(int nCode ,WPARAM wParam,LPARAM lParam)
参数wParam和 lParam包含所钩消息的信息,比如鼠标位置、状态,键盘按键等。nCode包含有关消息本身的信,比如是否从消息队列中移出。
实例:
下面我们通过安装鼠标钩子。和键盘钩子还截获输入的密码,并可查看*密码为例,来说明何何使用钩子。
1,进入向导,新建MFC AppWizard(dll) 取名为GetPass,选择MFC Extension DLL,完成。
2,新建一个CGetPassHook 类,基类:CObject,并加入StartHook,StopHook,函数,如下:
class AFX_EXT_CLASS CGetPassHook : public CObject
{
public:
BOOL StopHook();
BOOL StartHook(HWND hwnd);
CGetPassHook();
virtual ~CGetPassHook();
};
3:加入全局共享数据,如下:
#pragma data_seg("ShareData")
HHOOK hKeyBoardHook=NULL; file://keyboar hook
HHOOK hMouseHook=NULL; file://mouse hook
HINSTANCE glhInstance=NULL; file://globle instance
HWND hOutPutWnd=NULL; file://Display Pass Wnd
#pragma data_seg()
4:加入鼠标,键盘钩子处理函数,如下:
LRESULT WINAPI MouseHookProc(int nCode,WPARAM wParam ,LPARAM lParam)
{ file://鼠标钩子得理函数
LPMOUSEHOOKSTRUCT lpMouse=(MOUSEHOOKSTRUCT FAR*)lParam;
if(nCode>=0)
{
HWND hTargetHwnd=lpMouse->hwnd; file://得到鼠标所在窗口句柄
if(hTargetHwnd)
{
LONG style=::GetWindowLong(hTargetHwnd,GWL_STYLE); file://得到它的样式
if(style&ES_PASSWORD) file://如果是密码框
{
char szPass[255];
::SendMessage(hTargetHwnd,WM_GETTEXT,255,(LPARAM)szPass);
file://得到密码
::SendMessage(hOutPutWnd,WM_SETTEXT,0,(LPARAM)szPass);
file://显示密码
}
}
}
return CallNextHookEx(hMouseHook,nCode,wParam,lParam);
file://加上这句,就可以继续传递消息,如果没有,则会取消此消息的传递,
file://可以起到截儿消息的目的,我们这里调用之。
}
LRESULT WINAPI KeyBoardProc(int nCode,WPARAM wParam,LPARAM lParam)
{ file://keyboard hook proc
if(nCode>=0)
{
HWND hTargetHwnd=GetActiveWindow(); file://get active window
if(hTargetHwnd)
EnumChildWindows(hTargetHwnd,EnumWndProc,0); file://枚举所有窗口
}
return CallNextHookEx(hKeyBoardHook,nCode,wParam,lParam);
file://加上这句,就可以继续传递消息,如果没有,则会取消此消息的传递,
file://可以起到截儿消息的目的,我们这里调用之。
}
这里要介绍下EnumChildWindows函数,原形如下:
BOOL EnumChildWindows(HWND hWndParent,WINDENUMPROC lpEnumFunc,LPARAM lParam);
hWndParent:为枚举窗口的句柄
lpEnumFunc:枚举函数的地址,
lParam:这里为0
转贴于 中国论文下载中心 http://www.studa.net
发表评论
-
评论 (
2012-01-20 12:03 554评论 ( 2011年10月04日 初中英语教学予中考 ... -
安师大附中2012届高三第一
2012-01-20 12:03 747安师大附中2012届高三第 ... -
2012届高三语文每日一练
2012-01-20 12:03 11082012届高三语文每日一练 ... -
Button图片按钮
2012-01-19 16:53 798Button图片按钮 2011年11 ... -
VB中实现系统托盘图标实例
2012-01-19 16:53 1085VB中实现系统托盘图标实例 2011年04月19日 新建 ... -
SubClassWindow,SubClassDlgItem
2012-01-19 16:53 779SubClassWindow,SubClassDlgItem ... -
windows消息机制
2012-01-19 16:53 511windows消息机制 2011年04月21日 一 W ... -
Do it
2012-01-17 06:36 571Do it 2011年12月10日 网站开发工程师 申请 ... -
汽车英语词汇 (2012了 大家抓紧学习)
2012-01-17 06:36 670汽车英语词汇 (2012了 大家抓紧学习) 2012年0 ... -
win7电脑配置
2012-01-17 06:36 965win7电脑配置 2011年12月30日 ------- ... -
AS3 编程易犯盲点――绝对对您有帮助,新手们都来看看吧
2012-01-17 06:35 645AS3 编程易犯盲点――绝对对您有帮助,新手们都来看看吧 2 ... -
使用 WebBrowser 控件如何防止某些网页强行最大化
2012-01-16 05:18 684使用 WebBrowser 控件如何防止某些网页强行最大化 ... -
webbrowser模拟确定窗口对话框
2012-01-16 05:18 1222webbrowser模拟确定窗口对 ... -
使用Webbrowser的一点心得体会
2012-01-16 05:18 978使用Webbrowser的一点心得体会 2009年06月29 ... -
WebBrowser控件使用详解
2012-01-16 05:18 649WebBrowser控件使用详解 2010年09月29日 ... -
WebBrowser控件使用代理服务器(vb.net)
2012-01-16 05:18 1748WebBrowser控件使用代理服务器(vb.net) 20 ...
相关推荐
Hook钩子\钩子程序.pdfHook钩子\钩子程序.pdf
VC++ 钩子程序的编写 很危险 小心使用 再次提醒你,小心使用,会有不可预料的后果
MFC钩子程序编写的钩子程序,参照了网上大神们的思想,做出结构给需要的人们看看。 程序在KeyHook文件夹里的,希望对您有用了。
钩子程序VC代码,值得学习
键盘钩子程序和源码
VB版的鼠标计量钩子程序 VB版的鼠标计量钩子程序
编写钩子程序的步骤分为三步:定义钩子函数、安装钩子和卸载钩子。 1.定义钩子函数 钩子函数是一种特殊的回调函数。钩子监视的特定事件发生后,系统会调用钩子函数进行处理。不同事件的钩子函数的形式是各不...
系统钩子示例程序.rar 系统钩子示例程序.rar 系统钩子示例程序.rar
这是一个vc++6.0编写的内部钩子程序。
最近新买了Acer4741G的笔记本,但是笔记本上面的显示状态灯太少,比如没有显示大小写状态的灯,小键盘数字键的状态灯等,所以就写了一个键盘钩子程序,给自己做显示。 其中操作系统使用的是Win7,SetWindowsHookEx这...
利用VB,实现鼠标钩子程序,不要干坏事喔
一个简单的鼠标钩子VC程序;一个简单的鼠标钩子VC程序;一个简单的鼠标钩子VC程序.
~~~~~c#钩子程序讲解例子.doc~~~~~~~~
hook_钩子程序-delphihook_钩子程序-delphihook_钩子程序-delphi
鼠标钩子程序,可以学习下
最简单的钩子程序,适合初学者参考,能直接用VS2010编译通过,可以用该钩子框架修改处自己所需要的钩子程序
一个键盘钩子程序例子,在windows xp中顺利执行,在windows8中效果未知,但是据说可能行。
类似按键精灵,一个鼠标钩子程序.用vc++api编写.
vc++键盘鼠标钩子程序vc++键盘鼠标钩子程序
一个基本的鼠标钩子示例程序源码,帮助初学钩子编程的朋友学习钩子程序的基本套路。包括两个VC6.0工程(一个DLL,一个EXE)