之前看书,看到一眼消息钩子,一直没实践,现在有空弄了下,
主要原理是利用windows自带SetWindowsHookEx API函数
HHOOK SetWindowsHookEx(
int idHook, //hook形式
HOOKPROC lpfn //hook过程
HINSTANCE hmod //钩子所属的dll句柄
DWORD dwThreadId //要钩取的线程ID 全局钩子则传入0
)
其主要工作原理为,Windows发生相关消息时,会将含有钩子过程的
DLL强制注入目标进程的内存空间中,并且执行DLL中的钩子过程。
可钩取的消息有多种,这里我们试验WH_KEYBOARD尝试钩取windows
的键盘消息,来实现一个简单的键盘记录器。
我开始想要使用控制台程序下钩,貌似不行,控制台没有消息队列的原因吗?
之后改用win32后可以正常使用了
其核心是存在钩子过程的dll编写,代码如下
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "stdafx.h"
#include<stdio.h>
#include<Windows.h>
#include "hook.cpp"
#define _CRT_SECURE_NO_WARNINGS
HINSTANCE hinstance;//dll实例
HHOOK hhook;//钩子实例
HANDLE hfile;
FILE* pFile = NULL;
BOOL APIENTRY DllMain( HMODULE hModu