当前位置:   article > 正文

91.网游逆向分析与插件开发-游戏窗口化助手-游戏窗口化助手的UI设计

91.网游逆向分析与插件开发-游戏窗口化助手-游戏窗口化助手的UI设计

内容参考于:易道云信息技术研究院VIP课

上一个内容:项目需求与需求拆解-CSDN博客

 码云地址(游戏窗口化助手 分支):https://gitee.com/dye_your_fingers/sro_-ex.git

码云版本号:e512d44da1b7e6a8726b1be03b1956c6378e0833

代码下载地址,在 SRO_EX 目录下,文件名为:SRO_Ex-游戏窗口化助手的UI设计.zip

链接:https://pan.baidu.com/s/1W-JpUcGOWbSJmMdmtMzYZg

提取码:q9n5

--来自百度网盘超级会员V4的分享

HOOK引擎,文件名为:黑兔sdk.zip

链接:https://pan.baidu.com/s/1IB-Zs6hi3yU8LC2f-8hIEw

提取码:78h8

--来自百度网盘超级会员V4的分享

以 实现物品使用策略的功能-CSDN博客 它的代码为基础进行修改

新加Dialog:

控件:

静态文本的属性:其余静态文本都是这样

进度条的属性:其余进度条都是这样

给它新加的类:

CUI.cpp文件的修改:修改了 UIShow函数

  1. // CUI.cpp: 实现文件
  2. //
  3. #include "pch.h"
  4. #include "htdMfcDll.h"
  5. #include "CUI.h"
  6. #include "afxdialogex.h"
  7. #include "extern_all.h"
  8. // CUI 对话框
  9. IMPLEMENT_DYNAMIC(CUI, CDialogEx)
  10. CUI::CUI(CWnd* pParent /*=nullptr*/)
  11. : CDialogEx(IDD_MAIN, pParent)
  12. {
  13. }
  14. CUI::~CUI()
  15. {
  16. }
  17. void CUI::DoDataExchange(CDataExchange* pDX)
  18. {
  19. CDialogEx::DoDataExchange(pDX);
  20. DDX_Control(pDX, IDC_TAB1, mTab);
  21. }
  22. BOOL CUI::OnInitDialog()
  23. {
  24. CDialogEx::OnInitDialog();
  25. InstallPage(new CUIWnd_0(), IDD_PAGE_0, L"角色", TRUE);
  26. InstallPage(new CUIWnd_1(), IDD_PAGE_1, L"物品");
  27. SetBackgroundColor(0xFFFFFFFF);
  28. //PageINJ.Init(wAppPath);
  29. //PageRAN.SetAppPath(wAppPath);
  30. return TRUE;
  31. }
  32. bool CUI::InstallPage(CDialogEx* wnd, int IDD_WND, CString&& _Name, BOOL IsShow)
  33. {
  34. if (CurPage >= MAX_PAGE_MAIN) return false;
  35. Pages[CurPage] = wnd;
  36. Pages[CurPage]->Create(IDD_WND, this);
  37. //Pages[CurPage]->SetParent(this);
  38. Pages[CurPage]->ShowWindow(IsShow);
  39. CRect rect;
  40. mTab.GetClientRect(&rect);
  41. rect.top += 26;
  42. rect.left = 0;
  43. rect.bottom -= 5;
  44. rect.right -= 5;
  45. Pages[CurPage]->MoveWindow(&rect);
  46. mTab.InsertItem(CurPage, _Name);
  47. CurPage++;
  48. return true;
  49. }
  50. BEGIN_MESSAGE_MAP(CUI, CDialogEx)
  51. ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, &CUI::OnTcnSelchangeTab1)
  52. ON_WM_CLOSE()
  53. END_MESSAGE_MAP()
  54. // CUI 消息处理程序
  55. void CUI::OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)
  56. {
  57. // TODO: 在此添加控件通知处理程序代码
  58. *pResult = 0;
  59. int n = mTab.GetCurSel();
  60. for (int i = 0; i < CurPage; i++)
  61. {
  62. Pages[i]->ShowWindow(i == n);
  63. }
  64. }
  65. void CUI::UIShow()
  66. {
  67. auto hwndClient = ::FindWindow(L"CLIENT", L"SRO_CLIENT");
  68. // ::SetParent(this->m_hWnd, hwndClient);
  69. this->ShowWindow(ShowUI = !ShowUI);
  70. // 把焦点还给游戏
  71. ::SetFocus(hwndClient);
  72. _ui_helper->ShowWindow(TRUE);
  73. }
  74. void CUI::OnClose()
  75. {
  76. // TODO: 在此添加消息处理程序代码和/或调用默认值
  77. UIShow();
  78. // CDialogEx::OnClose();
  79. }

htdMfcDll.cpp文件的修改:修改了 InitInstance函数,新加 _ui_helper变量

  1. // htdMfcDll.cpp: 定义 DLL 的初始化例程。
  2. //
  3. #include "pch.h"
  4. #include "framework.h"
  5. #include "htdMfcDll.h"
  6. #include "extern_all.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #endif
  10. // #define WNDHOOK
  11. #pragma data_seg("_hdata")
  12. int client = 0;
  13. #pragma data_seg()
  14. #pragma comment(linker, "/SECTION:_hdata,RWS")
  15. BEGIN_MESSAGE_MAP(ChtdMfcDllApp, CWinApp)
  16. END_MESSAGE_MAP()
  17. CUI* _ui;
  18. CHelperUI* _ui_helper;
  19. // ChtdMfcDllApp 构造
  20. ChtdMfcDllApp::ChtdMfcDllApp()
  21. {
  22. }
  23. ChtdMfcDllApp theApp;
  24. ChtdMfcDllApp* PtheApp;
  25. HHOOK keyHook;
  26. LRESULT CALLBACK KeyCallBack(int nCode, WPARAM w, LPARAM l);
  27. BOOL ChtdMfcDllApp::InitInstance()
  28. {
  29. CWinApp::InitInstance();
  30. protect.CheckMult();
  31. game_ex.InitInterface();// 初始化游戏扩展接口
  32. client++;
  33. ui_helper.Create(IDD_MAIN);
  34. ui_helper_windowed.Create(IDD_HELPER);
  35. _ui = &ui_helper;
  36. _ui_helper = &ui_helper_windowed;
  37. return TRUE;
  38. }

htdMfcDll.h文件的修改:新加 ui_helper_windowed变量

  1. // htdMfcDll.h: htdMfcDll DLL 的主标头文件
  2. //
  3. #pragma once
  4. #ifndef __AFXWIN_H__
  5. #error "在包含此文件之前包含 'pch.h' 以生成 PCH"
  6. #endif
  7. #include "resource.h" // 主符号
  8. #include "CUI.h"
  9. #include "GameProtect.h"
  10. #include "GameEx.h"
  11. #include "GameBase.h"
  12. #include "CHelperUI.h"
  13. // ChtdMfcDllApp
  14. // 有关此类实现的信息,请参阅 htdMfcDll.cpp
  15. //
  16. class ChtdMfcDllApp : public CWinApp
  17. {
  18. public:
  19. ChtdMfcDllApp();
  20. // 重写
  21. public:
  22. virtual BOOL InitInstance();
  23. DECLARE_MESSAGE_MAP()
  24. protected:
  25. GameProtect protect;
  26. GameEx game_ex;
  27. GameBase game_base;
  28. CUI ui_helper;
  29. CHelperUI ui_helper_windowed;
  30. };

extern_all.h文件的修改:新加_ui_helper变量

  1. #pragma once
  2. #include "GameBase.h"
  3. #include "CUI.h"
  4. #include "CHelperUI.h"
  5. extern CHelperUI* _ui_helper;
  6. extern CUI* _ui;
  7. extern GameBase* _pgamebase;

CHelperUI.cpp文件的内容:

  1. // CHelperUI.cpp: 实现文件
  2. //
  3. #include "pch.h"
  4. #include "CHelperUI.h"
  5. #include "afxdialogex.h"
  6. // CHelperUI 对话框
  7. IMPLEMENT_DYNAMIC(CHelperUI, CDialogEx)
  8. CHelperUI::CHelperUI(CWnd* pParent /*=nullptr*/)
  9. : CDialogEx(IDD_HELPER, pParent)
  10. {
  11. }
  12. CHelperUI::~CHelperUI()
  13. {
  14. }
  15. BOOL CHelperUI::OnInitDialog()
  16. {
  17. CDialogEx::OnInitDialog();
  18. this->SetBackgroundColor(RGB(255, 255, 255));
  19. HPBar.SetBkColor(RGB(0 ,0, 0));
  20. MPBar.SetBkColor(RGB(0 ,0, 0));
  21. RageBar.SetBkColor(RGB(0 ,0, 0));
  22. ExBar.SetBkColor(RGB(0 ,0, 0));
  23. HPBar.SetBarColor(RGB(255 ,0, 0));
  24. MPBar.SetBarColor(RGB(0x0, 0x0, 0x99));
  25. RageBar.SetBarColor(RGB(0x66, 0x0, 0x66));
  26. ExBar.SetBarColor(RGB(0x00, 0xFF, 0xCC));
  27. HPBar.SetPos(50);
  28. MPBar.SetPos(50);
  29. RageBar.SetPos(50);
  30. ExBar.SetPos(50);
  31. return TRUE;
  32. }
  33. void CHelperUI::DoDataExchange(CDataExchange* pDX)
  34. {
  35. CDialogEx::DoDataExchange(pDX);
  36. DDX_Control(pDX, IDC_PRO_HP, HPBar);
  37. DDX_Control(pDX, IDC_PRO_MP, MPBar);
  38. DDX_Control(pDX, IDC_PRO_RAGE, RageBar);
  39. DDX_Control(pDX, IDC_PRO_RAGE2, ExBar);
  40. }
  41. BEGIN_MESSAGE_MAP(CHelperUI, CDialogEx)
  42. ON_BN_CLICKED(IDOK, &CHelperUI::OnBnClickedOk)
  43. END_MESSAGE_MAP()
  44. // CHelperUI 消息处理程序
  45. void CHelperUI::OnBnClickedOk()
  46. {
  47. // TODO: 在此添加控件通知处理程序代码
  48. CDialogEx::OnOK();
  49. }

CHelperUI.h文件的内容:

  1. #pragma once
  2. #include "afxdialogex.h"
  3. #include "resource.h"
  4. // CHelperUI 对话框
  5. class CHelperUI : public CDialogEx
  6. {
  7. DECLARE_DYNAMIC(CHelperUI)
  8. public:
  9. CHelperUI(CWnd* pParent = nullptr); // 标准构造函数
  10. virtual ~CHelperUI();
  11. // 对话框数据
  12. #ifdef AFX_DESIGN_TIME
  13. enum { IDD = IDD_HELPER };
  14. #endif
  15. protected:
  16. virtual BOOL OnInitDialog();
  17. virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
  18. DECLARE_MESSAGE_MAP()
  19. public:
  20. afx_msg void OnBnClickedOk();
  21. // 血量条
  22. CProgressCtrl HPBar;
  23. // 魔法条
  24. CProgressCtrl MPBar;
  25. // 怒气条
  26. CProgressCtrl RageBar;
  27. // 升级经验值条
  28. CProgressCtrl ExBar;
  29. };
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/68436
推荐阅读
相关标签
  

闽ICP备14008679号