设为首页收藏本站

SKY外语、计算机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5433|回复: 1
打印 上一主题 下一主题

[问题] MFC编写的DLL 键盘钩子注入问题。

[复制链接]

1

主题

0

好友

106

积分

注册会员

Rank: 2

性别
保密
跳转到指定楼层
楼主
发表于 2013-9-13 08:15:22 |只看该作者 |倒序浏览
本帖最后由 sky_yx 于 2015-12-30 14:16 编辑

环境:VS2008 WINXP
编写的一个MFC的DLL
经测试代码应该错在呼出窗体和隐藏窗体
DLL代码如下:
  1. GameInfo *Gamedlg;
  2. HHOOK g_hHook;
  3. LRESULT CALLBACK GameProc(int nCode, WPARAM wParam, LPARAM lParam); //键盘钩子
  4. //////////////////////////////////////////////////////////////////////////
  5. LRESULT CALLBACK GameProc(int nCode, WPARAM wParam, LPARAM lParam)
  6. {
  7. AFX_MANAGE_STATE(AfxGetStaticModuleState()); //宏
  8. //BOOL bKeyUp = lParam & (1<<31);
  9. //if (bKeyUp && wParam == VK_HOME && nCode == HC_ACTION) //HOME为热键
  10. if ((wParam==VK_HOME) && (lParam&(1<<31))==0)
  11. {
  12. if (Gamedlg==NULL) //如果GameDlg是空的 说明没有窗体
  13. {
  14. //AFX_MANAGE_STATE(AfxGetStaticModuleState());//宏
  15. CWnd *pCWnd = CWnd::GetForegroundWindow();
  16. Gamedlg=new GameInfo;
  17. Gamedlg->Create(IDD_GameMain,pCWnd);
  18. //Gamedlg->Create(IDD_GameMain);
  19. Gamedlg->ShowWindow(SW_SHOW);
  20. }
  21. else
  22. {
  23. Gamedlg->ShowWindow(Gamedlg->IsWindowVisible() ? SW_HIDE : SW_SHOW);
  24. //Gamedlg->ShowWindow(Gamedlg->IsWindowVisible() ? SW_SHOW:SW_HIDE);
  25. //Gamedlg->ShowWindow(SW_HIDE);
  26. //Gamedlg=NULL;
  27. }
  28. }
  29. return ::CallNextHookEx(g_hHook, nCode, wParam, lParam);
  30. }
  31. void SetHook()
  32. {
  33. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  34. //HWND GameH=::FindWindow(L"SciCalc",L"计算器"); //音乐播放器 By:年少 QQ:348619517
  35. //HWND GameH=::FindWindow(NULL,L"无标题 - 记事本");
  36. //HWND GameH=::FindWindow(NULL,L"音乐播放器 By:年少 QQ:348619517");
  37. HWND GameH=::FindWindow(L"TFrmMain",L"legend of mir2");
  38. if (GameH==0)
  39. {
  40. AfxMessageBox(L"未找到游戏进程!",MB_OK);
  41. return ;
  42. }
  43. DWORD ProcID=::GetWindowThreadProcessId(GameH,NULL);
  44. g_hHook=::SetWindowsHookEx(WH_KEYBOARD,&GameProc,GetModuleHandle(L"SoftDll.dll"),ProcID);
  45. if (g_hHook!=NULL)
  46. {
  47. AfxMessageBox(L"DLL注入成功!",MB_OK);
  48. return;
  49. }
  50. }
  51. BOOL CSoftDllApp::InitInstance()
  52. {
  53. CWinApp::InitInstance();
  54. return TRUE;
  55. }
  56. BOOL CSoftDllApp::ExitInstance()
  57. {
  58. delete Gamedlg;
  59. Gamedlg = NULL;
  60. return CWinApp::ExitInstance();
  61. //ShowWindow(Gamedlg->m_hWnd,SW_HIDE); //这样做 退出时会报内存错
  62. return TRUE;
  63. }
复制代码
注入计算器 记事本都可以 按Home键呼出 按Home键隐藏 很好用。  (游戏没有保护)

分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
分享淘帖0 收藏收藏0 评分评分

9

主题

9

好友

300

积分

版主

Rank: 7Rank: 7Rank: 7

性别
保密

最佳新人

沙发
发表于 2013-9-13 10:17:48 |只看该作者
本帖最后由 sky_yx 于 2015-12-30 14:16 编辑

:loveliness飘过

回复

使用道具 评分 举报

您需要登录后才可以回帖 登录 | 立即注册


手机版|SKY外语计算机学习 ( 粤ICP备12031577 )    

GMT+8, 2024-12-22 22:33 , Processed in 0.120802 second(s), 32 queries .

回顶部