SKY外语计算机学习

标题: MFC编写的DLL 键盘钩子注入问题。 [打印本页]

作者: 奋斗2013    时间: 2013-9-13 08:15
标题: MFC编写的DLL 键盘钩子注入问题。
本帖最后由 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键隐藏 很好用。  (游戏没有保护)


作者: 丿情调    时间: 2013-9-13 10:17
本帖最后由 sky_yx 于 2015-12-30 14:16 编辑

:loveliness飘过






欢迎光临 SKY外语计算机学习 (http://join.skywj.com/) Powered by Discuz! X2.5