Window钩子的简单使用

  • Window钩子的简单使用已关闭评论
  • 5,528 views
  • A+

拦截消息,用来增加游戏的快捷键

1.打开vs2015新建MFC dll工程    ActiveKey

dll类型选择

Window钩子的简单使用

然后完成

2.新建头文件ActiveKey.h

类容如下

Window钩子的简单使用

这是关于类的声明

3.下面去定义该类  来到ActiveKey.cpp

在上方引入头文件,加上共享数据段

Window钩子的简单使用

glhInstance保存引用此dll的程序的实例句柄

glhHook是钩子的引用,用于判断钩子是否运行与释放钩子

4.创建对应种类钩子的截获消息函数

(这里我用的是WH_KEYBOARD类型)

所以此函数为

Window钩子的简单使用

其中nCode小于0时  必须return CallNextHookEx(钩子,......接收的参数

!(lParam&0x80000000)   表示的是鼠标是否是按下状态

关于lParam参数可以查相应的手册

wParam传入的是按键类型   VK_F1等   ASCII码

5.关键类容 Start()  Stop()

Window钩子的简单使用

这里主要使用了两个API函数

glhHook=SetWindowsHookEx(WH_KEYBOARD, KeyBoardProc, glhInstance, 0)

UnhookWindowsHookEx(glhHook)

一个创建钩子,一个卸载钩子

创建钩子,第一个参数就是钩子的类型,第二个就是拦截函数,第三为程序域,使用使用此dll的应用程序的实例句柄,第四个是需要拦截的进程ID,可以用FindWindow得到HWND,再通过GetWindowThreadProcessId获取,若这个参数为空,则拦截所有进程的此类型消息

6.析构函数,释放钩子内存

Window钩子的简单使用

7.来到dllmain.cpp

在这里我们来为实例句柄赋值

先在前面声明外部变量

Window钩子的简单使用

在将实例参数赋值给此共享变量

Window钩子的简单使用

8.运行生成dll,lib文件

9.新建一个基于对话框的MFC工程

打开对应的工程目录,将ActiveKey.h,ActiveKey.dll,ActiveKey.lib

复制到工程目录中

然后打开工程属性,引入lib文件

Window钩子的简单使用

10.

在stdafx.h最后面包含头文件ActiveKey.h

在...Dlg.h文件中加入变量

Window钩子的简单使用

11.新建按钮激活

双击生成按钮点击事件,添加代码

Window钩子的简单使用

运行收工,最后要记得在使用的运行文件.exe目录下放上ActiveKey.dll