首页 > 编程知识 正文

c十十编程教学软件,c语言windows函数库

时间:2023-05-04 19:07:33 阅读:114462 作者:292

这个示例程序使用全局挂接函数。 程序分为两个部分:可执行程序MouseDemo和动态连接库

MouseHook。 首先创建MFC扩展动态连接库MouseHook.dll:

(一)选择MFCappwizard ) dll )创建项目Mousehook;

(二)选择MFCextensiondll )类型;

(三)通过项目菜单的AddToProject子菜单的“New…”添加头文件MouseHook.h。

(四)在头文件中制作挂钩类:

class afx _ ext _ class c mouse hook :公共对象

{

公共:

CMouseHook (; //钩类构造函数

~CMouseHook (; //挂钩类析构函数

蓝牙(hwnd hwnd ); //安装挂接函数

BOOL StopHook (; //卸载挂接函数

(;

(五)在MouseHook.cpp文件中添加#include'MouseHook.h '语句;

(六)参与全局共享数据变量:

#pragmadata_seg('mydata ' ) ) ) )。

HWND glhPrevTarWnd=NULL; //上次用鼠标指定的窗口句柄

HWND glhDisplayWnd=NULL; //显示目标窗口标题编辑框的句柄

HHOOK glhHook=NULL; //已安装鼠标的检查句柄

hinstance glh instance=空值; //DLL实例句柄

#pragma data_seg ()

(七)在DEF文件中定义段属性:

第二阶段

我的数据读写共享

(八)在主文件MouseHook.cpp的DllMain函数中添加保存DLL实例句柄的语句:

satic afx _ extension _ modulemousehookdll={ null,NULL };

扩展应用程序

dl main (高性能,DWORD dwReason,LPVOID lpReserved ) )。

{

统一参数(lpreserved;

if (dw reason==dll _ process _ attach ) )。

{

if (! afxinitextensionmodule (mouse hook dll,hInstance ) )

返回0;

newcdynlinklibrary (mouse hook dll;

glh实例=hinstance; 插入并保存//dll实例句柄

}

else if (dw reason==dll _ process _ detach ) ) ) )。

{

afxtermextensionmodule (mouse hook dll;

}

返回1; //ok

}

此函数的最重要部分是调用AfxInitExtensionModule (),将DLL初始化并放入MFC框架中

正确的工作。 DllMain (需要传递给的DLL实例句柄和AFX_EXTENSION_MODULE

结构,结构中有对MFC有用的信息。

(九)类CMouseHook成员函数的具体实现:

cmousehook :3360 cmousehook//类构造函数

{

}

cmousehook :3360~cmousehook (//类析构函数

{

停止hook (;

}

安装boolcmousehook :3360 start hook (hwnd hwnd )//挂钩,设置接收显示窗口句柄

{

BOOL bResult=FALSE;

glh hook=setwindowshookex (wh _ mouse,MouseProc,glhInstance,0 );

if(GlhHook!=NULL )

bResult=TRUE;

glhDisplayWnd=hWnd; //设置目标窗口标题编辑框的句柄

返回结果;

}

boolcmousehook :3360 stop hook ()//摘钩

{

BOOL bResult=FALSE;

if(glhhook ) ) )。

{

bresult=unhookwindowshookex;

是if(bresult )

{

glhPrevTarWnd=NULL;

glhDisplayWnd=NULL; //清变量

glhHook=NULL;

}

}

返回结果;

}

(十)钩子函数的实现

Lesultwinapimouseproc(intncode、WPARAM wparam、LPARAM lparam ) )。

{

lpmousehookstructpmousehook=(mousehookstructfar * ) lparam;

if(ncode=0) )

{

hwndglhtargetwnd=pmousehook-hwnd; //获取目标窗口的句柄

HWND ParentWnd=glhTargetWnd;

wile(Parentwnd!=NULL )

{

glhTargetWnd=ParentWnd;

parent wnd=get parent (glhtargetwnd; //获取APP应用程序主窗口句柄

}

If (千兆网!=glhPrevTarWnd )

{

char szCaption[100];

获取窗口文本(glhtargetwnd,szCaption,100 ); //获取目标窗口的标题

if (is窗口(glhdisplaywnd ) )

sendmessage(glhdisplaywnd,WM_SETTEXT,0,) LPARAM ) ) LPCTSTR ) szCaption;

glhPrevTarWnd=glhTargetWnd; //保存位置窗口

}

}

returncallnexthookex(glhhook,nCode,wparam,lparam ); //继续发送信息

}

编译完成后,您将获得运行时所需的鼠标挂接动态连接库MouseHook.dll和链接

MouseHook.lib

现在创建一个调用鼠标挂接动态连接库的挂接可执行程序。

(一)在MFC的应用程序向导exe中创建项目MouseDemo;

(二)选择“基于对话的应用”,剩下的几步切实节约;

(三)在对话框中添加编辑框IDC_EDIT1;

(四)在MouseDemo.h中加入对Mousehook.h的包含语句) #Include'Mousehook.h );

(五)向CMouseDemoDlg.h的CMouseDemoDlg类定义中添加私有数据成员:

CMouseHook m_hook;

(六)在OnInitDialog函数的“TODO注释”后添加:

cwnd*pwnd=getdlgitem(IDC_edit1; //获取编辑框的类指针

m _ hook.start hook (pwnd-getsafehwnd (); //获取编辑框的窗口手柄并安装挂钩

(七)在头文件CMouseDemoDlg.h中添加#pragmacomment ) lib、' mousehook.lib '

(八)将MouseHook.h和MouseHook.lib复制到MouseDemo项目目录,MouseHook.dll

复制到调试目录。 编译程序就可以了。 当鼠标悬停在窗口上时,编辑框将显示窗口的

将显示标题。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。