深入解析钩子和动态链接库(下)

2016-02-19 12:56 2 1 收藏

只要你有一台电脑或者手机,都能关注图老师为大家精心推荐的深入解析钩子和动态链接库(下),手机电脑控们准备好了吗?一起看过来吧!

【 tulaoshi.com - 编程语言 】

/*****************************************************************                             clearMyHook* Inputs:*       HWND hWnd: Window whose hook is to be cleared* Result: BOOL*       TRUE if the hook is properly unhooked*       FALSE if you gave the wrong parameter* Effect:*       Removes the hook that has been set.****************************************************************/__declspec(dllexport) BOOL clearMyHook(HWND hWnd)   {    if(hWnd != hWndServer)       return FALSE;    BOOL unhooked = UnhookWindowsHookEx(hook);    if(unhooked)       hWndServer = NULL;    return unhooked;   }/*****************************************************************                              msghook* Inputs:*       int nCode: Code value*       WPARAM wParam: parameter*       LPARAM lParam: parameter* Result: LRESULT** Effect:*       If the message is a mouse-move message, posts it back to*       the server window with the mouse coordinates* Notes:*       This must be a CALLBACK function or it will not work!****************************************************************/ static LRESULT CALLBACK msghook(int nCode, WPARAM wParam, LPARAM lParam)   {    // If the value of nCode is 0, just pass it on and return 0    // this is required by the specification of hook handlers    if(nCode 0)      { /* pass it on */       CallNextHookEx(hook, nCode,                   wParam, lParam);       return 0;      } /* pass it on */     // Read the documentation to discover what WPARAM and LPARAM    // mean. For a WH_MESSAGE hook, LPARAM is specified as being    // a pointer to a MSG structure, so the code below makes that    // structure available     LPMSG msg = (LPMSG)lParam;     // If it is a mouse-move message, either in the client area or    // the non-client area, we want to notify the parent that it has    // occurred. Note the use of PostMessage instead of SendMessage    if(msg-message == WM_MOUSEMOVE ||       msg-message == WM_NCMOUSEMOVE)      PostMessage(hWndServer,                  UWM_MOUSEMOVE,                     0, 0);      // Pass the message on to the next hook    return CallNextHookEx(hook, nCode,                        wParam, lParam);   } // msghookThe server application
在头文件中,将下面的增加到类的protected段:

afx_msg LRESULT OnMyMouseMove(WPARAM,LPARAM);在application 文件中, 增加以下代码到文件前部。

UINT UWM_MOUSEMOVE = ::RegisterWindowMessage(UWM_MOUSEMOVE_MSG);在 MESSAGE_MAP, 增加以下代码

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

 //{AFX_MSG comments:

ON_REGISTERED_MESSAGE(UWM_MOUSEMOVE, OnMyMouseMove)In your application file, add the following function:

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

LRESULT CMyClass::OnMyMouseMove(WPARAM, LPARAM)   {    // ...do stuff here    return 0;   }        上面是我写的一个小程序。既然我为了钩子花了n+1st 时间,我干脆给它一个好的用户界面。 猫在窗口之内盯着老鼠。小心! 当老鼠足够接近猫时并且它将捉住老鼠!

深入解析钩子和动态链接库(下)

你可以下载这个项目并建立它。 真正的关键是DLL 子工程项目; 其他的都不过是陪衬。有几个其它的技术被用在这个例子里,包括各种各样的图画技术, ClipCursor 和 SetCapture的用法,区域选择、屏幕更新等等。,因此除了展示钩子函数的使用以外,对初级程序员掌握窗口样式设计编程也有一些价值。

来源:https://www.tulaoshi.com/n/20160219/1602533.html

延伸阅读
1.Windows的动态链接库原理 动态链接库(DLLs)是从C语言函数库和Pascal库单元的概念发展而来的。所有的C语言标准库函数都存放在某一函数库中,同时用户也可以用LIB程序创建自己的函数库。在链接应用程序的过程中,链接器从库文件中拷贝程序调用的函数代码,并把这些函数代码添加到可执行文件中。这 种方法同只把函数储存在已...
比较大应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作。其中可能存在一些模块的功能较为通用,在构造其它软件系统时仍会被使用。在构造软件系统时,如果将所有模块的源代码都静态编译到整个应用程序EXE文件中,会产生一些问题:一个缺点是增加了应用程序的大小,它会占用更多的磁盘空间...
从前文可知,DLL在程序编制中可作出巨大贡献,它提供了具共性代码的复用能力。但是,正如一门高深的武学,若被掌握在正义之侠的手上,便可助其仗义江湖;但若被掌握在邪恶之徒的手上,则必然在江湖上掀起腥风血雨。DLL正是一种这样的武学。DLL一旦染上了魔性,就不再是正常的DLL程序,而是DLL木马,一种恶贯满盈的病毒,令特洛伊一夜之间国...
摘要 文中介绍了一种实现VB调用C语言程序的方法-动态连接库法,给出了动态链接库制作的一般框架,通过实例描述了动态连接库的实现及其制做方法、编程步骤,这种方法具有普遍的意义。 关键词:VB,动态连接库DLL,C程序 一、引言 VisualBasic(以下简称VB)是一种可视化的面向对象的编程语言,以其编程简单、快捷等特点,深受广...
3  利用DLLs实现数据传输 3.1 DLLs中的全局内存 Windows规定:DLLs并不拥有它打开的任何文件或它分配的任何全局内存块。这些对象由直接或间接调用DLLs的应用程序拥有。这样,当应用程序中止时,它拥有的打开的文件自动关闭,它拥有的全局内存块自动释放。这就意味着保存在DLLs全局变量中的文件和全局内存块...

经验教程

313

收藏

90
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部