钩子程序解释说明都要注意小心钩子哦
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
发表评论
-
使用 CMake 进行跨平台软件开发
2012-01-20 09:42 1009使用 CMake 进行跨平台软 ... -
IronPython:交互式解释器与常用函数
2012-01-20 09:42 798IronPython:交互式解释器 ... -
Boost在VS2008下的正确编译
2012-01-20 09:42 1072Boost在VS2008下的正确编译 2010年11月28日 ... -
Win32平台下编译SVN源码全过程
2012-01-20 09:42 1177Win32平台下编译SVN源码 ... -
《Qt for Symbian》翻译系列之六:第一章 简介与写作初衷
2012-01-20 09:42 871《Qt for Symbian》翻译系列之六:第一章 简介与写 ... -
激励口号
2012-01-19 14:47 660激励口号 2011年02月16日 ... -
团队精神训练团队口号精神口号团队心声营销口号知道口碑营销
2012-01-19 14:47 1350团队精神训练团队口号 ... -
团队口号_激励口号_口号大全分享到:
2012-01-19 14:47 1181团队口号_激励口号_口 ... -
团队口号|营销团队励志口号大全
2012-01-19 14:46 2837团队口号|营销团队励志口号大全 2011年09月09日 ... -
销售口号
2012-01-19 14:46 846销售口号 2010年11月12日 团队精神训练团队口号精 ... -
VB中实现系统托盘图标实例
2012-01-17 04:31 619VB中实现系统托盘图标实例 2011年04月19日 新建 ... -
SubClassWindow,SubClassDlgItem
2012-01-17 04:31 668SubClassWindow,SubClassDlgItem ... -
使用Setwindowlong和Callwindowproc这两个Api函数[转的]
2012-01-17 04:31 1964使用Setwindowlong和Callwindo ... -
windows消息机制
2012-01-17 04:31 608windows消息机制 2011年04月21日 一 W ... -
(转载)温州人生意经
2012-01-16 03:21 539(转载)温州人生意经 2010年05月03日 温州人生意 ... -
温州人生意经
2012-01-16 03:21 581温州人生意经 2010年07月04日 “有市场的地方就有 ...
相关推荐
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)