20.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-数据分析工具数据类型编辑功能的实现

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

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

上一个内容:19.数据分析工具数据类型配置功能的实现

码云地址(master 分支):https://gitee.com/dye_your_fingers/titan

码云版本号:037b8a13a9b2a1b635fe2beddc7c2c1ac7abd602

代码下载地址,在 titan 目录下,文件名为:titan-数据分析工具数据类型编辑功能的实现.zip

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

提取码:q9n5

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

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

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

提取码:78h8

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

以 19.数据分析工具数据类型配置功能的实现 它的代码为基础进行修改

上一个内容里把输出到列表显示复选框,搞成了控件类型,这里要进行更改,下图是我改好之后的截图,

修改的代码位置:

数据设置里的菜单添加处理事件

修改:

删除:

CSet.cpp文件的修改:修改了 OnNMRClickList2函数、OnAddMsgType函数、OnSetMsg函数,新加 IsExitMsg函数、IsExitData函数、OnSetDataType函数、OnDelData函数、nDataSel变量

// CSet.cpp: 实现文件
//#include "pch.h"
#include "DataAnly.h"
#include "CSet.h"
#include "afxdialogex.h"
#include "extern_all.h"// CSet 对话框IMPLEMENT_DYNAMIC(CSet, CDialogEx)CSet::CSet(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_SET, pParent)
{}CSet::~CSet()
{
}void CSet::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Control(pDX, IDC_LIST1, lstMsgType);DDX_Control(pDX, IDC_LIST2, lstDataType);
}BOOL CSet::OnInitDialog()
{CDialogEx::OnInitDialog();SetListView(&lstMsgType);SetListView(&lstDataType);lstMsgType.InsertColumn(0, L"名称", 0, 100);lstMsgType.InsertColumn(1, L"宏定义", 0, 100);lstMsgType.InsertColumn(2, L"类型", 0, 100); // 数据和文本,文本直接显示,数据有点复杂看之后实现位置lstMsgType.InsertColumn(3, L"输出到文件", 0, 100);lstDataType.InsertColumn(0, L"消息类型", 0, 100);lstDataType.InsertColumn(1, L"编号", 0, 100);lstDataType.InsertColumn(2, L"名称", 0, 100);lstDataType.InsertColumn(3, L"背景颜色", 0, 100);lstDataType.InsertColumn(4, L"字体颜色", 0, 100);lstDataType.InsertColumn(5, L"显示", 0, 100);lstDataType.InsertColumn(6, L"输出", 0, 100);lstDataType.InsertColumn(7, L"单独输出", 0, 100);return TRUE;
}BEGIN_MESSAGE_MAP(CSet, CDialogEx)ON_BN_CLICKED(IDOK, &CSet::OnBnClickedOk)ON_BN_CLICKED(IDCANCEL, &CSet::OnBnClickedCancel)ON_NOTIFY(NM_RCLICK, IDC_LIST1, &CSet::OnNMRClickList1)ON_NOTIFY(NM_RCLICK, IDC_LIST2, &CSet::OnNMRClickList2)ON_COMMAND(ID_32771, &CSet::OnAddMsgType)ON_COMMAND(ID_32772, &CSet::OnSetMsg)ON_COMMAND(ID_32773, &CSet::OnDelMsg)ON_COMMAND(ID_32777, &CSet::OnAddDataType)ON_COMMAND(ID_32775, &CSet::OnSetDataType)ON_COMMAND(ID_32776, &CSet::OnDelData)
END_MESSAGE_MAP()// CSet 消息处理程序void CSet::OnBnClickedOk()
{// TODO: 在此添加控件通知处理程序代码CDialogEx::OnOK();
}void CSet::OnBnClickedCancel()
{// TODO: 在此添加控件通知处理程序代码CDialogEx::OnCancel();
}void CSet::OnNMRClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{LPNMITEMACTIVATE p = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);// TODO: 在此添加控件通知处理程序代码*pResult = 0;nMsgSel = p->iItem;/*GetMessagePos函数可以,获取光标位置返回值低16位是x,高16位是y*/DWORD dwPos = GetMessagePos();CPoint point(LOWORD(dwPos), HIWORD(dwPos));CMenu menu;menu.LoadMenuW(IDR_MENU1);// 根据菜单窗口id获取一个菜单窗口对象CMenu* pop = menu.GetSubMenu(0);// 获取第一个菜单,也就是现在的消息设置这个菜单// 在指定位置显示浮动弹出菜单,并跟踪弹出菜单上项的选择情况。pop->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this);
}void CSet::OnNMRClickList2(NMHDR* pNMHDR, LRESULT* pResult)
{LPNMITEMACTIVATE p = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);// TODO: 在此添加控件通知处理程序代码*pResult = 0;nDataSel = p->iItem;/*GetMessagePos函数可以,获取光标位置返回值低16位是x,高16位是y
*/DWORD dwPos = GetMessagePos();CPoint point(LOWORD(dwPos), HIWORD(dwPos));CMenu menu;menu.LoadMenuW(IDR_MENU1);// 根据菜单窗口id获取一个菜单窗口对象CMenu* pop = menu.GetSubMenu(1);// 获取第一个菜单,也就是现在的消息设置这个菜单// 在指定位置显示浮动弹出菜单,并跟踪弹出菜单上项的选择情况。pop->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
}void CSet::OnAddMsgType()
{if (wndMsgSet.DoModal() == IDOK) {int icount = lstMsgType.GetItemCount();for (int i = 0; i < icount; i++){if (lstMsgType.GetItemText(i, 0) == wndMsgSet.txtName) {AfxMessageBox(L"消息名已存在!");return;}if (lstMsgType.GetItemText(i, 1) == wndMsgSet.txtDefine) {AfxMessageBox(L"宏定义已存在!");return;}}lstMsgType.InsertItem(icount, wndMsgSet.txtName);lstMsgType.SetItemText(icount, 1, wndMsgSet.txtDefine);lstMsgType.SetItemText(icount, 2, wndMsgSet.txtTypeName);lstMsgType.SetItemText(icount, 3, txtBool[wndMsgSet.IsTxt]);}
}void CSet::OnSetMsg()
{if (nMsgSel > -1) {wndMsgSet.SetDatas(lstMsgType.GetItemText(nMsgSel, 0), lstMsgType.GetItemText(nMsgSel, 1), lstMsgType.GetItemText(nMsgSel, 2), lstMsgType.GetItemText(nMsgSel, 3)==L"是");if (wndMsgSet.DoModal() == IDOK) {int icount = lstMsgType.GetItemCount();for (int i = 0; i < icount; i++){if (lstMsgType.GetItemText(i, 0) == wndMsgSet.txtName) {if (i != nMsgSel) {AfxMessageBox(L"消息名已存在!");return;}}if (lstMsgType.GetItemText(i, 1) == wndMsgSet.txtDefine) {if (i != nMsgSel) {AfxMessageBox(L"宏定义已存在!");return;}}}lstMsgType.SetItemText(nMsgSel, 0, wndMsgSet.txtName);lstMsgType.SetItemText(nMsgSel, 1, wndMsgSet.txtDefine);lstMsgType.SetItemText(nMsgSel, 2, wndMsgSet.txtTypeName);lstMsgType.SetItemText(nMsgSel, 3, txtBool[wndMsgSet.IsTxt]);}}
}void CSet::OnDelMsg()
{if (nMsgSel > -1) {lstMsgType.DeleteItem(nMsgSel);}
}void CSet::OnAddDataType()
{if (nMsgSel > -1) {// 给消息数据窗口里消息名称输入框赋值wndDataSet.txtName = lstMsgType.GetItemText(nMsgSel, 0);if (wndDataSet.DoModal() == IDOK) {if (!IsExitMsg(wndDataSet.txtName)) {AfxMessageBox(L"消息不存在,可能已经被删除!");return;}if (IsExitData(wndDataSet.txtName, wndDataSet.txtId)) {AfxMessageBox(L"消息对应的数据编号已经存在!");return;}int icount = lstDataType.GetItemCount();lstDataType.InsertItem(icount, wndDataSet.txtName);lstDataType.SetItemText(icount,1, wndDataSet.txtId);lstDataType.SetItemText(icount,2, wndDataSet.txtDataName);lstDataType.SetItemText(icount,3, wndDataSet.txtBackColor);lstDataType.SetItemText(icount,4, wndDataSet.txtFontColor);lstDataType.SetItemText(icount,5, txtBool[wndDataSet.IsShowUI]);lstDataType.SetItemText(icount,6, txtBool[wndDataSet.IsTxt]);lstDataType.SetItemText(icount,7, txtBool[wndDataSet.IsTxtAlone]);}}
}void CSet::OnSetDataType()
{if (nDataSel > -1) {wndDataSet.txtName = lstDataType.GetItemText(nDataSel, 0),wndDataSet.txtId = lstDataType.GetItemText(nDataSel, 1),wndDataSet.txtDataName = lstDataType.GetItemText(nDataSel, 2),wndDataSet.txtBackColor = lstDataType.GetItemText(nDataSel, 3),wndDataSet.txtFontColor = lstDataType.GetItemText(nDataSel, 4),wndDataSet.IsShowUI = lstDataType.GetItemText(nDataSel, 5) == L"是";wndDataSet.IsTxt = lstDataType.GetItemText(nDataSel, 6) == L"是";wndDataSet.IsTxtAlone = lstDataType.GetItemText(nDataSel, 7) == L"是";if (wndDataSet.DoModal() == IDOK) {int icount = nDataSel;if (!IsExitMsg(wndDataSet.txtName)) {AfxMessageBox(L"消息不存在,可能已经被删除!");lstDataType.DeleteItem(nDataSel);return;}if (IsExitData(wndDataSet.txtName, wndDataSet.txtId, icount)) {AfxMessageBox(L"消息对应的数据编号已经存在!");return;}lstDataType.SetItemText(icount, 0, wndDataSet.txtName);lstDataType.SetItemText(icount, 1, wndDataSet.txtId);lstDataType.SetItemText(icount, 2, wndDataSet.txtDataName);lstDataType.SetItemText(icount, 3, wndDataSet.txtBackColor);lstDataType.SetItemText(icount, 4, wndDataSet.txtFontColor);lstDataType.SetItemText(icount, 5, txtBool[wndDataSet.IsShowUI]);lstDataType.SetItemText(icount, 6, txtBool[wndDataSet.IsTxt]);lstDataType.SetItemText(icount, 7, txtBool[wndDataSet.IsTxtAlone]);}}
}void CSet::OnDelData()
{if (nDataSel > -1) {lstDataType.DeleteItem(nDataSel);}
}bool CSet::IsExitMsg(CString& _name)
{for (int i = 0; i < lstMsgType.GetItemCount(); i++){if (lstMsgType.GetItemText(i, 0) == _name) {return true;}}return false;
}bool CSet::IsExitData(CString& _name, CString& _id)
{for (int i = 0; i < lstDataType.GetItemCount(); i++){if ((lstDataType.GetItemText(i, 0) == _name)&&(lstDataType.GetItemText(i, 1) == _id)) {return true;}}return false;
}bool CSet::IsExitData(CString& _name, CString& _id, int index)
{for (int i = 0; i < lstDataType.GetItemCount(); i++){if ((lstDataType.GetItemText(i, 0) == _name) && (lstDataType.GetItemText(i, 1) == _id)&&(index != i)) {return true;}}return false;
}

CSet.h文件的修改:新加 IsExitMsg函数、IsExitData函数、OnSetDataType函数、OnDelData函数、nDataSel变量

#pragma once
#include "CSetMsg.h"
#include "CSetData.h"// CSet 对话框class CSet : public CDialogEx
{DECLARE_DYNAMIC(CSet)public:CSet(CWnd* pParent = nullptr);   // 标准构造函数virtual ~CSet();// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_SET };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持	// 生成的消息映射函数virtual BOOL OnInitDialog();DECLARE_MESSAGE_MAP()
public:CListCtrl lstMsgType;CListCtrl lstDataType;afx_msg void OnBnClickedOk();afx_msg void OnBnClickedCancel();afx_msg void OnNMRClickList1(NMHDR* pNMHDR, LRESULT* pResult);afx_msg void OnNMRClickList2(NMHDR* pNMHDR, LRESULT* pResult);afx_msg void OnAddMsgType();
public:CSetMsg wndMsgSet;CSetData wndDataSet;CString txtBool[2]{ L"否", L"是" };int nMsgSel; // 消息定义列表选中行索引int nDataSel; // 数据定义列表选中行索引afx_msg void OnSetMsg(); // lstMsgType 添加数据afx_msg void OnDelMsg(); // lstMsgType 列表数据删除afx_msg void OnAddDataType(); // 选中 lstMsgType 列表里的一个数据,根据这个数据添加一个 lstDataType列表数据afx_msg void OnSetDataType(); // lstDataType 列表数据修改afx_msg void OnDelData(); // lstDataType 列表数据删除// 判断 lstMsgType 列表是否有重复的bool IsExitMsg(CString& _name);// 判断 lstDataType 列表里的内容是否有重复的bool IsExitData(CString& _name, CString& _id);// 判断 lstDataType 列表里的内容是否有重复的 修改里要排除自身所以才有的这个函数bool IsExitData(CString& _name, CString& _id, int index);
};

CSetData.h文件的修改:修改 IsShowUI变量类型

#pragma once// CSetData 对话框class CSetData : public CDialogEx
{DECLARE_DYNAMIC(CSetData)public:CSetData(CWnd* pParent = nullptr);   // 标准构造函数virtual ~CSetData();// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_SETDATA };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持DECLARE_MESSAGE_MAP()
public:CString txtName;CString txtId;CString txtDataName;CString txtBackColor;CString txtFontColor;BOOL IsTxt;BOOL IsTxtAlone;BOOL IsShowUI;afx_msg void OnBnClickedButton1();afx_msg void OnBnClickedButton6();afx_msg void OnBnClickedOk();
};

CSetData.cpp文件的修改:修改了 DoDataExchange函数、CSetData函数

// CSetData.cpp: 实现文件
//#include "pch.h"
#include "DataAnly.h"
#include "CSetData.h"
#include "afxdialogex.h"// CSetData 对话框IMPLEMENT_DYNAMIC(CSetData, CDialogEx)CSetData::CSetData(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_SETDATA, pParent), txtName(_T("")), txtId(_T("0"))// 设置数据编号输入框默认值, txtDataName(_T("无")) // 设置数据名字输入框默认值, txtBackColor(_T("FFFFFF"))  // 设置背景颜色默认值为白色, txtFontColor(_T("0")) // 设置文字颜色默认值为黑色, IsTxt(FALSE), IsTxtAlone(FALSE), IsShowUI(FALSE)
{}CSetData::~CSetData()
{
}void CSetData::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT3, txtName);DDX_Text(pDX, IDC_EDIT1, txtId);DDX_Text(pDX, IDC_EDIT2, txtDataName);DDX_Text(pDX, IDC_EDIT5, txtBackColor);DDX_Text(pDX, IDC_EDIT6, txtFontColor);DDX_Check(pDX, IDC_CHECK1, IsTxt);DDX_Check(pDX, IDC_CHECK2, IsTxtAlone);DDX_Check(pDX, IDC_CHECK3, IsShowUI);
}BEGIN_MESSAGE_MAP(CSetData, CDialogEx)ON_BN_CLICKED(IDC_BUTTON1, &CSetData::OnBnClickedButton1)ON_BN_CLICKED(IDC_BUTTON6, &CSetData::OnBnClickedButton6)ON_BN_CLICKED(IDOK, &CSetData::OnBnClickedOk)
END_MESSAGE_MAP()// CSetData 消息处理程序void CSetData::OnBnClickedButton1()
{/*颜色选择Dialog对象*/CColorDialog color;color.m_cc.Flags |= CC_RGBINIT;/*color.DoModal() 打开一个颜色选择对话框*/if (color.DoModal() == IDOK) {txtBackColor.Format(L"%X", color.m_cc.rgbResult);UpdateData(false);}
}void CSetData::OnBnClickedButton6()
{/*颜色选择Dialog对象
*/CColorDialog color;color.m_cc.Flags |= CC_RGBINIT;/*color.DoModal() 打开一个颜色选择对话框*/if (color.DoModal() == IDOK) {txtFontColor.Format(L"%X", color.m_cc.rgbResult);UpdateData(false);}
}void CSetData::OnBnClickedOk()
{UpdateData(TRUE);CDialogEx::OnOK();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/522702.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

指针进阶(下)指针实操

sizeof 和 strlen 首先我们来复习一下sizeof 和 strlen 的区别。 sizeof 是操作符&#xff0c;只关注内存中存放的数据的大小&#xff0c;并不会参与sizeof 括号内部的计算。注意它的单位是字节 #include <stdio.h>int main() {int a 10;printf("%d\n", size…

javascript之常见设计模式

前置知识 构造函数 普通函数 在 JavaScript 中&#xff0c;很多时候&#xff0c;你需要避免使用 new 关键字。 类 单例模式 顾名思义&#xff0c;一个类确保只有一个实例&#xff0c;供全局访问 实现单例模式通常包括以下关键步骤&#xff1a; 私有构造函数&#xff1a;确保…

3.8 动态规划 背包问题

一.01背包 46. 携带研究材料&#xff08;第六期模拟笔试&#xff09; (kamacoder.com) 代码随想录 (programmercarl.com) 携带研究材料: 时间限制&#xff1a;5.000S 空间限制&#xff1a;128MB 题目描述: 小明是一位科学家&#xff0c;他需要参加一场重要的国际科学大会…

基于textdistance计算文本相似度

textdistance是Python的第三方库&#xff0c;用于计算文本之间的相似度或距离。它提供了30个算法&#xff0c;简单易用。 安装 pip install textdistance# 使用扩展库&#xff0c;提高性能 pip install "textdistance[extras]"使用 import textdistance# 计算编辑…

提醒一下!今年考研的人不要太老实了!!

今年准备计算机考研的同学&#xff0c;别太老实了&#xff01;别人说什么你就信什么 如果你的工作能力不足以支撑找到一个满意的工作&#xff0c;那我建议再沉淀两年&#xff01; 很多同学其实有点眼高手低&#xff0c;在计算机专业&#xff0c;低于1w的工作看不上&#xff0…

用一个 Python 脚本实现依次运行其他多个带 argparse 命令行参数的 .py 文件

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 问题描述&#xff1a;在 Windows 环境中&#xff0c;您希望通过一个 Python 脚本来实现特定的自动化任务&#xff0c;该任务需要依次运行其他多个带 argparse 命令行参数的 .py 文件。您希望找到一种简…

华为设备小型园区网方案(有线+无线+防火墙)

&#xff08;一&#xff09;配置有线部分 1.配置LSW2 &#xff08;1&#xff09;创建相关vlan [LSW2]vlan batch 10 3000 &#xff08;2&#xff09;配置连接LSW1的Eth-Trunk1&#xff0c;透传VLAN 10 3000 [LSW2]int Eth-Trunk 1 [LSW2-Eth-Trunk1]port link-type trunk [LSW2…

安装nexus + 部署私有maven仓库

安装nexus 部署私有maven仓库 文章目录 安装nexus 部署私有maven仓库1.下载2.解压3.修改配置文件4.启动5.访问6.查看默认密码7.创建私库8.修改代码配置文件9.在maven 的setting.xml中配置私库的账号密码10.运行manve 【deploy】命令测试11.maven项目引用私库12. 重新加载mave…

指针进阶(4)看一下这些与指针有关的题你都会做吗?

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

智慧公厕的三大特点:信息化、数字化、智慧化

智慧公厕是以物联网、互联网、大数据、云计算等先进技术为支撑&#xff0c;对公共厕所的使用、运营、管理、养护进行全方位高效应用的创新型公厕。它具有三大显著特点&#xff1a;&#xff08;ZonTree中期&#xff09;信息化、数字化和智慧化。本文以智慧公厕源头实力厂家广州中…

Vision Transformer结构解析

Vision Transformer结构解析 ViT简介ViT参数量ViT三大模块ViT图像预处理模块——PatchEmbed多层Transformer Encoder模块MLP&#xff08;FFN&#xff09;模块 基本的Transformer模块Vision Transformer类的实现Transformer知识点网络结构计算复杂度对比Transformer的参数量和计…

几种电脑提示mfc140.dll丢失的解决方法,以及如何预防mfc140.dll丢失

mfc140.dll真是一个超级关键的动态链接库文件&#xff01;一旦这个文件不翼而飞&#xff0c;可能会导致一些程序无法顺利运行&#xff0c;甚至给系统带来麻烦。但别担心&#xff01;遇到mfc140.dll文件丢失的情况&#xff0c;我们有一堆应对措施可以立马施行&#xff0c;确保问…