1.首先创建一个DLL项目,用以生成自定义的DLL文件,在DLL文件中对外有两个接口,安装钩子的函数SetHook和卸载钩子函数UnSetHook函数,对于
这些函数由于需要导出,所以在工程项目的.h文件中需要声明这些函数需要导出。
//MouseKeyboardHook.h
#ifdef MOUSEKEYBOARDHOOK_EXPORTS
#define MOUSEKEYBOARDHOOK_API __declspec(dllexport)
#else
#define MOUSEKEYBOARDHOOK_API __declspec(dllimport)
#endif
extern "C" MOUSEKEYBOARDHOOK_API int SetHook( DWORD dwThreadId );
extern "C" MOUSEKEYBOARDHOOK_API int UnSetHook(void);
这里只有安装钩子函数有参数,该参数是线程ID号,这里需要注意,如果在调用DLL时发现找不到函数地址,那就需要加extern “C” 说明了,当时我就是没有加郁闷了很久才找到这个问题。我思考了一下,应该是DLL中我采用的是C编程语言,而我的调用该DLL的应用程序默认是C++,但是由于C和C++的OBJ的函数名格式不同,所以才会出现找不到函数地址的问题。是对于DLL的头文件按照这个格式就可以导出函数了。
//MouseKeyboardHook.cpp文件
#include "stdafx.h"
#include "MouseKeyboardHo