把hook功能写进dll,程序调用dll,对键盘消息进行hook
hook.dll源代码如下
#include <windows.h>
extern "C" __declspec(dllexport) VOID SetHookOn();
extern "C" __declspec(dllexport) VOID SetHookOff();
HHOOK g_Hook = NULL;
HINSTANCE g_Inst = NULL;
LRESULT CALLBACK KeyboardProc(int code, WPARAM w, LPARAM l)
{
if(w == WM_KEYDOWN)
MessageBox(NULL,0,TEXT("摁下按键"),0);
else if(w == WM_KEYUP)
MessageBox(NULL,0,TEXT("抬起按键"),0);
return CallNextHookEx(g_Hook,code,w,l);
}
BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
g_Inst = (HINSTANCE)hModule;
return true;
}
VOID SetHookOn()
{
g_Hook = SetWindowsHookEx(WH_KEYBOARD_LL,KeyboardProc,g_Inst,0);
}
VOID SetHookOff()
{
UnhookWindowsHookEx (g_Hook);
}
MFC窗口程序部分代码如下
#include <windows.h>
extern "C" VOID SetHookOn();
extern "C" VOID SetHookOff();
#pragma comment(lib,"hook.lib")
void Cmfc4Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
SetHookOn();
}
void Cmfc4Dlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
SetHookOff();
}