- A+
拦截消息,用来增加游戏的快捷键
1.打开vs2015新建MFC dll工程 ActiveKey
dll类型选择
然后完成
2.新建头文件ActiveKey.h
类容如下
这是关于类的声明
3.下面去定义该类 来到ActiveKey.cpp
在上方引入头文件,加上共享数据段
glhInstance保存引用此dll的程序的实例句柄
glhHook是钩子的引用,用于判断钩子是否运行与释放钩子
4.创建对应种类钩子的截获消息函数
(这里我用的是WH_KEYBOARD类型)
所以此函数为
其中nCode小于0时 必须return CallNextHookEx(钩子,......接收的参数
!(lParam&0x80000000) 表示的是鼠标是否是按下状态
关于lParam参数可以查相应的手册
wParam传入的是按键类型 VK_F1等 ASCII码
5.关键类容 Start() Stop()
这里主要使用了两个API函数
glhHook=SetWindowsHookEx(WH_KEYBOARD, KeyBoardProc, glhInstance, 0)
UnhookWindowsHookEx(glhHook)
一个创建钩子,一个卸载钩子
创建钩子,第一个参数就是钩子的类型,第二个就是拦截函数,第三为程序域,使用使用此dll的应用程序的实例句柄,第四个是需要拦截的进程ID,可以用FindWindow得到HWND,再通过GetWindowThreadProcessId获取,若这个参数为空,则拦截所有进程的此类型消息
6.析构函数,释放钩子内存
7.来到dllmain.cpp
在这里我们来为实例句柄赋值
先在前面声明外部变量
在将实例参数赋值给此共享变量
8.运行生成dll,lib文件
9.新建一个基于对话框的MFC工程
打开对应的工程目录,将ActiveKey.h,ActiveKey.dll,ActiveKey.lib
复制到工程目录中
然后打开工程属性,引入lib文件
10.
在stdafx.h最后面包含头文件ActiveKey.h
在...Dlg.h文件中加入变量
11.新建按钮激活
双击生成按钮点击事件,添加代码
运行收工,最后要记得在使用的运行文件.exe目录下放上ActiveKey.dll