分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
让我学会HOOK的一篇文章:http://blog.sina.com.cn/s/blog_628821950100xmuc.html //感激不尽呀
文章出处,好像是这篇:http://blog.csdn.net/glliuxueke/article/details/2702608 //我后来才看到的
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
这篇文章用到的HOOK代码,跟我的前一篇文章【HOOK API入门之Hook自己程序的MessageBoxW】差不多,
其地址是:http://blog.csdn.net/friendan/article/details/12222651
因为这次HOOK的是系统所有用到MessageBox的程序,所以我们必须把代码写在dll文件中,
这里我用的是MFC DLL
-------------------------------------------------------------------------------------------------------------------------------------------------------------
熟悉API的都知道,系统中没有MessageBox,有的只是MessageBoxA和MessageBoxW,
因此HOOK MessageBox,其实是HOOK MessageBoxA和MessageBoxW。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//老规矩,先看看我们的程序及效果截图,后面再进行分析,文章后面附有VS2008源码下载
//程序主界面
//HOOK 程序本身的MessageBoxA
///HOOK 程序本身的MessageBoxW
//启动HOOK后,切换到记事本的查找功能,其调用的MessageBoxW也被我们HOOK了
-------------------------------------------------------------------------------------------------------------------------------------
关于dll如何和主程序对话框进行通信,请看我的另一篇文章【低级鼠标钩子WH_MOUSE_LL】
文章地址:http://blog.csdn.net/friendan/article/details/12168273
-------------------------------------------------------------------------------------------------------------------------------------
下面说一下HOOK所有程序的MessageBox的思路。
首先必须明确我们的HOOK代码是写在dll文件中的,要HOOK一个程序的MessageBox,则必须
让其加载我们的dll文件,如何才能让一个程序加载我们的dll文件呢?这里我用的是鼠标钩子,
即我们安装一个全局的鼠标钩子WH_MOUSE,这样当任何一个程序响应鼠标消息时,其就会
加载我们的dll文件,按理说,窗口程序都会响应鼠标消息的,不然我们怎么能移动一个窗口呢。
当然,不响应鼠标消息的程序,如果你也想HOOK它,换其它类型的钩子即可。
---------------------------------------------------------------------------------------------------------------------------------------------------
下面说一下该dll文件的编写过程:
1.打开VS 2008,新建一个MFC DLL工程,dll类型我选择的是【带静态链接MFC的规则DLL(R)】
---------------------------------------------------------------------------------------------------------------------------------------------------
2.在dll文件中编写安装鼠标钩子的函数StartHook(HWND hWnd)和卸载鼠标钩子的函数StopHook(),
这里说的只是个大概的过程,变量定义什么的,我就忽略了,具体请看原工程源码,
我们这里只说重点。
相关代码如下:
//鼠标钩子过程,目的是加载本dll到使用鼠标的程序//鼠标钩子的作用:当鼠标在某程序窗口中时,其就会加载我们这个dllLRESULT CALLBACK MouseProc( int nCode, // hook code WPARAM wParam, // message identifier LPARAM lParam // mouse coordinates ){ if (nCode==HC_ACTION) { //将钩子所在窗口句柄发给主程序 ::SendMessage(g_hWnd,UM_WNDTITLE,wParam,(LPARAM)(((PMOUSEHOOKSTRUCT)lParam)->hwnd)); } return CallNextHookEx(hhk,nCode,wParam,lParam);}//安装钩子BOOL WINAPI StartHook(HWND hWnd){ g_hWnd=hWnd; hhk=::SetWindowsHookEx(WH_MOUSE,MouseProc,hInst,0); if (hhk==NULL) { return FALSE; }