64.网游逆向分析与插件开发-游戏增加自动化助手接口-优化自动助手与游戏焦点的切换

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

上一个内容:自动化助手UI与游戏菜单的对接-CSDN博客

码云地址(master分支):https://gitee.com/dye_your_fingers/sro_-ex.git

码云版本号:617ac3477ef18273fb9cc281be3c04052304b965

代码下载地址,在 SRO_EX 目录下,文件名为:SRO_Ex-优化自动助手与游戏焦点的切换.zip

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

提取码:q9n5

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

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

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

提取码:78h8

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

自动化助手UI与游戏菜单的对接-CSDN博客 它的代码为基础进行修改

图1:首先给处理窗体关闭时不调用UIShow函数问题,给窗口添加一个 WM_CLOSE 消息处理函数

修改窗口标题:

删除无用组件:

搞完下方的代码就会流畅很多了(SetFocus函数)

CUI.cpp文件的修改,新加 OnClose函数,修改了OnInitDialog函数、UIShow,OnClose函数是通过MFC添加的,如图1

cpp 复制代码
// CUI.cpp: 实现文件
//

#include "pch.h"
#include "htdMfcDll.h"
#include "CUI.h"
#include "afxdialogex.h"


// CUI 对话框

IMPLEMENT_DYNAMIC(CUI, CDialogEx)

CUI::CUI(CWnd* pParent /*=nullptr*/)
	: CDialogEx(IDD_MAIN, pParent)
{

}

CUI::~CUI()
{
}

void CUI::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_TAB1, mTab);
}

BOOL CUI::OnInitDialog()
{
	CDialogEx::OnInitDialog();
	
	InstallPage(new CUIWnd_0(), IDD_PAGE_0, L"基本", TRUE);
	InstallPage(new CUIWnd_1(), IDD_PAGE_1, L"测试");

	SetBackgroundColor(0xFFFFFFFF);

	//PageINJ.Init(wAppPath);
	//PageRAN.SetAppPath(wAppPath);

	return TRUE;
}

bool CUI::InstallPage(CDialogEx* wnd, int IDD_WND, CString&& _Name, BOOL IsShow)
{

	if (CurPage >= MAX_PAGE_MAIN) return false;
	Pages[CurPage] = wnd;
	Pages[CurPage]->Create(IDD_WND, this);
	//Pages[CurPage]->SetParent(this);
	Pages[CurPage]->ShowWindow(IsShow);

	CRect rect;
	mTab.GetClientRect(&rect);
	rect.top += 46;
	rect.left += 20;
	rect.bottom += 5;
	rect.right += 5;
	Pages[CurPage]->MoveWindow(&rect);
	mTab.InsertItem(CurPage, _Name);

	CurPage++;
	return true;
}

BEGIN_MESSAGE_MAP(CUI, CDialogEx)
	ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, &CUI::OnTcnSelchangeTab1)
	ON_WM_CLOSE()
END_MESSAGE_MAP()


// CUI 消息处理程序


void CUI::OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)
{
	// TODO: 在此添加控件通知处理程序代码
	*pResult = 0;
	int n = mTab.GetCurSel();
	for (int i = 0; i < CurPage; i++)
	{
		Pages[i]->ShowWindow(i == n);
	}
}

void CUI::UIShow()
{
	auto hwndClient = ::FindWindow(L"CLIENT", L"SRO_CLIENT");
	::SetParent(this->m_hWnd, hwndClient);
	this->ShowWindow(ShowUI = !ShowUI);
	// 把焦点还给游戏
	::SetFocus(hwndClient);
}


void CUI::OnClose()
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	UIShow();
	// CDialogEx::OnClose();
}
相关推荐
da_vinci_x18 小时前
在Substance Designer里“预演”你的游戏着色器(Shader)
人工智能·游戏·技术美术·着色器·游戏策划·游戏美术·substance designer
reddingtons18 小时前
ZBrush细节烘焙全“糊”了?Painter“平均法线”+“偏斜贴图”的“无笼”烘焙管线
游戏·设计师·贴图·技术美术·substance painter·游戏美术·zbrush
嘀咕博客2 天前
h5游戏免费下载:HTML5拉杆子过关小游戏
前端·游戏·html5
FairGuard手游加固2 天前
Cocos资源加密方案解析
安全·游戏·cocos2d
UWA3 天前
为什么Android游戏画面在30帧运行时有抖动现象
android·游戏
软件开发技术深度爱好者3 天前
python使用Pygame库实现避障小人行走游戏
python·游戏·pygame
星空露珠3 天前
数独生成题目lua脚本
数据结构·数据库·算法·游戏·lua
wanhengidc3 天前
云手机 基于云计算的虚拟手机
运维·服务器·游戏·智能手机·云计算
王火火(DDoS CC防护)4 天前
游戏盾是如何保障游戏安全稳定的?
游戏·网络安全·ddos攻击·sdk游戏盾
上海云盾第一敬业销售4 天前
高防CDN如何确保电商平台在购物节期间运转如常
安全·游戏·ddos