主要原理:通过线程钩子截获魔兽进程的键盘消息,然后模拟我们所需要的按键。软件设计基于MFC和用到的一些windowsAPI。
1. 界面布局和要求功能
软件界功能少见面简单,主要有小键盘和自定义的改键。(玩dota的都知道)
要求:编辑框只能显示一个键的字符且大写,按空格键时最好显示“空”,按键定义不能重复,显示改键开启状态。
2. 动态链接库
软件的核心是键盘钩子。先要写个动态链接库DLL。主要函数SetWindowsHookEx,参见MSDN。DLL主要有cpp文件和def输出函数定义文件。
将用户界面设置的改建前和改建后的按键字符保存在两个字符数组中。
由于钩子的回调函数LRESULTCALLBACK KeyboardProc在dll中,而用户的改键设置保存在主程序中,所以我们在启动改键时需要将改键的设置传入dll中,通过共享数据块保存。
Dll中的函数在主函数中的声明,否则无法调用
在主程序StdAfx.h中:
_declspec(dllimport) void setHook(HWND hwnd,char *pre,char *fin);
_declspec(dllimport) void deleHook();
_declspec(dllimport) void chat(int flag);
#pragma comment(lib,"War3hook.lib")//链接dll编译生成的lib文件
war3hook.def:主要是输出这三个函数然后在主程序中调用
LIBRARY War3hook
EXPORTS
setHook @2
deleHook @3
chat @4
war3hook.cpp:
#include <windows.h>
#pragma data_seg("MYSEC")
char prek[11]={0};
char fink[11]={0};//改键设置保存
HWND g_hWnd=NULL;//保存魔兽窗口句柄
int chaton=0;//监听聊天状态
#pragma data_seg()
#pragma comment(linker, "/section:MYSEC,rws")
//共享数据块定义
HHOOK g_hKeybo