码迷,mamicode.com
首页 > 系统相关 > 详细

2.添加键盘钩子。向进程中注入dll

时间:2015-03-09 12:34:40      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:

学习笔记

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();
}

 

 

 

2.添加键盘钩子。向进程中注入dll

标签:

原文地址:http://www.cnblogs.com/bboy-coco/p/4323102.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!