学习笔记

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&(<<)==))//取出lparam的第31位0则是被按下
{
AfxMessageBox(L"按下F12");
}
return CallNextHookEx(,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();//导入函数的声明
//vs2008以后可以不这样来加载和导入函数的声明。
//在窗体类顶部加上
//typedef HHOOK TSetHook(void); //定义变量别名
//TSetHook *SetHook;//定义函数指针
//在消息处理程序中加上
//HMODULE hdd=LoadLibrary(L"mydll.dll");//加载链接库
//SetHook=(TSetHook*)::GetProcAddress(hdd,"SetHook");//获取函数地址
void CrxjhcDlg::OnBnClickedButtonsethook()
{
// TODO: 在此添加控件通知处理程序代码
SetHook();
}

 

最新文章

  1. 【C#进阶系列】24 运行时序列化
  2. SpringMVC 常用注解(1)
  3. 再读GFS论文
  4. 【 D3.js 入门系列 --- 5 】 如何添加坐标轴
  5. 函数lock_rec_get_n_bits
  6. Mysql操作个人收集
  7. linq to sql用partial扩展属性,创建一个部分类(用于多表连接)
  8. Jenkins构建Android项目持续集成之单元测试及代码覆盖率
  9. VMware虚拟机误删除vmdk文件后如何恢复?
  10. 使用kqueue的str_cli函数
  11. RAM和ROM
  12. SSM+MyBatis框架详解
  13. UML 用例建模
  14. python网络编程(十三)
  15. 生产者与消费者+Queue(线程安全)
  16. NPOI导入excel文件为DataTable,使用SqlBulkCopy添加到数据库表
  17. 运行Scrapy项目提示“import win32api ImportError: DLL load failed: 找不到指定的模块。”
  18. 【Oracle】使用dbms_job包创建Oracle定时任务
  19. kinect2的标定
  20. PHP秒杀系统全方位设计分析(二)

热门文章

  1. golang开发android环境搭建_window
  2. GetSystemMetrics() 函数的用法
  3. php100视频教程解压密码
  4. CMD 模块定义规范
  5. Java静态类
  6. WordPress Simple Login Registration插件’username‘参数跨站脚本漏洞
  7. 如何 对 Windows 窗体控件进行线程安全调用
  8. HDU 5922 Minimum’s Revenge 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)
  9. 每天进步一点点--JS中的getYear()
  10. Qt 与 JavaScript 通信