2.添加键盘钩子。向进程中注入dll
学习笔记
1.首先要建立mfc的动态链接库。在def文件中放入要导出的函数名。
2.添加函数如下
//安装钩子 //HHOOK SetWindowsHookEx( // int idHook,//钩子的类型WH_KEYBOARD键盘钩子 // HOOKPROC lpfn,//钩子的回调函数,钩子类型不同回调函数不同 // HINSTANCE hwnd,//dll动态链接库的句柄 // DWORD dwthreadid//游戏主进程的id 是GetWindowThreadProcessId的返回值 // ) //键盘钩子对应的回调函数 LRESULT CALLBACK GameProc( int code, WPARAM wParam,//按键代码,例如f12=VK_F12 LPARAM lParam//按键相关的信息。具体百度 ) { //用到mfc中的api就得加上这句宏!!!! AFX_MANAGE_STATE(AfxGetStaticModuleState()); //还可以添加按键被按下之后执行的逻辑 if((wParam==VK_F12)&&(lParam&(1<<31)==0))//取出lparam的第31位0则是被按下 { AfxMessageBox(L"按下F12"); } return CallNextHookEx(0,code,wParam,lParam); } #define gamename L"YB_OnlineClient"//宏定义窗口名称 void SetHook() { //用到mfc中的api就得加上这句宏!!!! AFX_MANAGE_STATE(AfxGetStaticModuleState()); //获取窗口句柄 HWND gameh=::FindWindowW(NULL,gamename); //获取线程id DWORD gameid=GetWindowThreadProcessId(gameh,NULL); //线程钩子第三个参数不能为0,第四个参数为0 则是全局钩子。 //::GetModuleHandleA("mydll.dll")获取动态链接库的句柄 ::SetWindowsHookExW(WH_KEYBOARD,&GameProc,::GetModuleHandleA("mydll.dll"),gameid); }
3.新建窗口程序添加钩子。
3.1把动态链接库生成的dll和lib文件复制到窗口程序的release文件下或者根目录下或者debug下
3.2添加程序如下
#pragma comment(lib,"mydll.lib")//引入dll的链接库 _declspec(dllimport) void SetHook();//导入函数的声明 void CrxjhcDlg::OnBnClickedButtonsethook() { // TODO: 在此添加控件通知处理程序代码 SetHook(); }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。