WarH.cpp
上传用户:tree100901
上传日期:2016-07-12
资源大小:182k
文件大小:4k
源码类别:

外挂编程

开发平台:

Visual C++

  1. // WarH.cpp : 定义应用程序的类行为。
  2. //
  3. #include "stdafx.h"
  4. #include "WarH.h"
  5. #include "MyTab.h"
  6. #include "StaticURL.h"
  7. #include "WarHDlg.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #endif
  11. BOOL saveActive = FALSE;
  12. void WINAPI Check(LPVOID p)
  13. {
  14. HWND hWnd;
  15. HANDLE hProc;
  16. DWORD dwProcID;
  17. CWarHApp* obj = (CWarHApp*)p;
  18. while (true)
  19. {
  20. Sleep(100);
  21. obj->m_bRun = false;
  22. obj->m_bActive = false;
  23. //obj->m_bInput = false;
  24. hWnd = ::FindWindow(NULL, _T("Warcraft III"));
  25. if (hWnd)
  26. obj->m_bRun = true;
  27. ::SetWindowText(obj->m_pMainWnd->GetSafeHwnd(), _T("魔兽辅助工具 V2.10 (War3 is run!)"));
  28. if (::GetForegroundWindow() == hWnd)
  29. {
  30. ::SetWindowText(obj->m_pMainWnd->GetSafeHwnd(), _T("魔兽辅助工具 V2.10 (War3 is ForegroundWindow!)"));
  31. obj->m_bActive = true;
  32. if (saveActive == 0 && obj->m_bShowHP)
  33. {
  34. keybd_event(0xDB, 0, KEYEVENTF_EXTENDEDKEY, 0);
  35. keybd_event(0xDD, 0, KEYEVENTF_EXTENDEDKEY, 0);
  36. }
  37. }
  38. saveActive = obj->m_bActive;
  39. ::GetWindowThreadProcessId(hWnd, &dwProcID);
  40. hProc = ::OpenProcess(PROCESS_VM_READ, FALSE, dwProcID);
  41. ASSERT(hProc);
  42. ::ReadProcessMemory(hProc, (LPVOID)0x0045CB8C, (LPVOID)&obj->m_bInput, 4, NULL);
  43. ::CloseHandle(hProc);
  44. }
  45. else
  46. {
  47. ::SetWindowText(obj->m_pMainWnd->GetSafeHwnd(), _T("魔兽辅助工具 V2.10 (War3 is no run!)"));
  48. }
  49. }
  50. }
  51. void EnableDebug()
  52. {
  53. HANDLE hToken;
  54. LUID sedebugnameValue;
  55. TOKEN_PRIVILEGES tkp;
  56. if ( ! OpenProcessToken( GetCurrentProcess(),
  57. TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
  58. return;
  59. if ( ! LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) ){
  60. CloseHandle( hToken );
  61. return;
  62. }
  63. tkp.PrivilegeCount = 1;
  64. tkp.Privileges[0].Luid = sedebugnameValue;
  65. tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  66. if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
  67. CloseHandle( hToken );
  68. }
  69. // CWarHApp
  70. BEGIN_MESSAGE_MAP(CWarHApp, CWinApp)
  71. ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
  72. END_MESSAGE_MAP()
  73. // CWarHApp 构造
  74. CWarHApp::CWarHApp()
  75. {
  76. // TODO: 在此处添加构造代码,
  77. // 将所有重要的初始化放置在 InitInstance 中
  78. m_bRun = 0;
  79. m_bShowHP = 0;
  80. m_bChangeKey = 0;
  81. m_bActive = 0;
  82. m_bInput = 0;
  83. }
  84. // 唯一的一个 CWarHApp 对象
  85. CWarHApp theApp;
  86. // CWarHApp 初始化
  87. BOOL CWarHApp::InitInstance()
  88. {
  89. // 如果一个运行在 Windows XP 上的应用程序清单指定要
  90. // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
  91. //则需要 InitCommonControlsEx()。否则,将无法创建窗口。
  92. INITCOMMONCONTROLSEX InitCtrls;
  93. InitCtrls.dwSize = sizeof(InitCtrls);
  94. // 将它设置为包括所有要在应用程序中使用的
  95. // 公共控件类。
  96. InitCtrls.dwICC = ICC_WIN95_CLASSES;
  97. InitCommonControlsEx(&InitCtrls);
  98. CWinApp::InitInstance();
  99. AfxEnableControlContainer();
  100. // 标准初始化
  101. // 如果未使用这些功能并希望减小
  102. // 最终可执行文件的大小,则应移除下列
  103. // 不需要的特定初始化例程
  104. // 更改用于存储设置的注册表项
  105. // TODO: 应适当修改该字符串,
  106. // 例如修改为公司或组织名
  107. SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
  108. EnableDebug();
  109. CWarHDlg dlg;
  110. m_pMainWnd = &dlg;
  111. ::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Check, this, 0, 0);
  112. INT_PTR nResponse = dlg.DoModal();
  113. if (nResponse == IDOK)
  114. {
  115. // TODO: 在此处放置处理何时用“确定”来关闭
  116. //  对话框的代码
  117. }
  118. else if (nResponse == IDCANCEL)
  119. {
  120. // TODO: 在此放置处理何时用“取消”来关闭
  121. //  对话框的代码
  122. }
  123. // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
  124. //  而不是启动应用程序的消息泵。
  125. return FALSE;
  126. }