HOOK API入门篇(四)
来源:互联网 发布:淘宝会员折扣怎么取消 编辑:程序博客网 时间:2024/06/05 04:05
下面说说在VC6中全局共享数据的实现
在主文件中,用#pragma data_seg建立一个新的数据段并定义共享数据,其具体格式为:
仅定义一个数据段还不能达到共享数据的目的,还要告诉编译器该段的属性,有两种方法可以实现该目的(其效果是相同的),一种方法是在.DEF文件中加入如下语句:
SETCTIONS shareddata READ WRITE SHARED
另一种方法是在项目设置链接选项中加入如下语句:
(4)在Mousehook.app文件的顶部加入#include"Mousehook.h"语句;
(5)加入全局共享数据变量:#pragma data_seg("mydata")
HWND glhPrevTarWnd=NULL;
//上次鼠标所指的窗口句柄
HWND glhDisplayWnd=NULL;
//显示目标窗口标题编辑框的句柄
HHOOK glhHook=NULL;
//安装的鼠标钩子句柄
HINSTANCE glhInstance=NULL;
//DLL实例句柄
#pragma data_seg()
HWND glhPrevTarWnd=NULL;
//上次鼠标所指的窗口句柄
HWND glhDisplayWnd=NULL;
//显示目标窗口标题编辑框的句柄
HHOOK glhHook=NULL;
//安装的鼠标钩子句柄
HINSTANCE glhInstance=NULL;
//DLL实例句柄
#pragma data_seg()
(6)在DEF文件中定义段属性:
SECTIONS
mydata READ WRITE SHARED
mydata READ WRITE SHARED
(7)在主文件Mousehook.cpp的DllMain函数中加入保存DLL实例句柄的语句:
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
//如果使用lpReserved参数则删除下面这行
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
TRACE0("MOUSEHOOK.DLL Initializing!/n");
//扩展DLL仅初始化一次
if (!AfxInitExtensionModule(MousehookDLL, hInstance))
return 0;
new CDynLinkLibrary(MousehookDLL);
//把DLL加入动态MFC类库中
glhInstance=hInstance;
//插入保存DLL实例句柄
}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("MOUSEHOOK.DLL Terminating!/n");
//终止这个链接库前调用它
AfxTermExtensionModule(MousehookDLL);
}
return 1;
}
{
//如果使用lpReserved参数则删除下面这行
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
TRACE0("MOUSEHOOK.DLL Initializing!/n");
//扩展DLL仅初始化一次
if (!AfxInitExtensionModule(MousehookDLL, hInstance))
return 0;
new CDynLinkLibrary(MousehookDLL);
//把DLL加入动态MFC类库中
glhInstance=hInstance;
//插入保存DLL实例句柄
}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("MOUSEHOOK.DLL Terminating!/n");
//终止这个链接库前调用它
AfxTermExtensionModule(MousehookDLL);
}
return 1;
}
/SECTION:shareddata,rws
好了,准备知识已经学完了,让我们开始编写个全局的钩子程序吧!
由于全局钩子函数必须包含在动态链接库中,所以本例由两个程序体来实现。
1.建立钩子Mousehook.DLL
(1)选择MFC AppWizard(DLL)创建项目Mousehook;
(2)选择MFC Extension DLL(共享MFC拷贝)类型;
(3)由于VC5没有现成的钩子类,所以要在项目目录中创建Mousehook.h文件,在其中建立钩子类:
class AFX_EXT_CLASS Cmousehook:public CObject
{
public:
Cmousehook();
//钩子类的构造函数
~Cmousehook();
//钩子类的析构函数
BOOL starthook(HWND hWnd);
//安装钩子函数
BOOL stophook();
卸载钩子函数
};
{
public:
Cmousehook();
//钩子类的构造函数
~Cmousehook();
//钩子类的析构函数
BOOL starthook(HWND hWnd);
//安装钩子函数
BOOL stophook();
卸载钩子函数
};
#pragma data_seg ("shareddata")
HWND sharedwnd=NULL;//共享数据
#pragma data_seg()
HWND sharedwnd=NULL;//共享数据
#pragma data_seg()
- HOOK API入门篇(四)
- HOOK API入门篇(二)
- HOOK API入门篇(三)
- HOOK API入门篇(五)
- HOOK API 入门篇(六)
- HOOK API入门篇(一)
- HOOK API入门之Hook
- API Hook总结之四
- Detours API HOOK快速入门
- 一步一步走进Linux HOOK API(四)
- 一步一步走进Linux HOOK API(四)
- 一步一步走进Linux HOOK API(四)
- HOOK API入门之Hook自己程序的MessageBoxW
- HOOK API入门之Hook自己程序的MessageBoxW
- HOOK API入门之Hook自己程序的MessageBoxW
- xposed hook入门篇
- API hook原理和实例快速入门(inline hook),以dll线程注入方式使用(win7-64bit)
- API hook原理和实例快速入门(inline hook),以dll线程注入方式使用(win7-64bit)
- Java程序员的C#入门教程 - 开发环境搭建
- 弱校ACM奋斗史
- 《设计模式——可复用面向对象软件的基础》学习笔记(1.4)The catalog of design patterns
- 使用Memcached实现Session共享
- HOOK API入门篇(三)
- HOOK API入门篇(四)
- debian6 安装mono
- http://projecteuler.net/problem=16 [Answer:1366]
- HOOK API入门篇(五)
- HOOK API 入门篇(六)
- 资治通鉴,卷八十三,孔方兄的来历
- C#脚本实践(四): 反射与序列化
- 实时许愿应用Zaarly需求发布总量超940万美金
- 内容监听器ContentObserver