⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gamemasterview.cpp

📁 游戏修改器 大家可以看看呵呵 老牌子的 但是可能别人已经发过了
💻 CPP
字号:
// GameMasterView.cpp : CGameMasterView 类的实现
//

#include "stdafx.h"
#include "GameMaster.h"

#include "GameMasterDoc.h"
#include "GameMasterView.h"
#include ".\gamemasterview.h"

#include "ProInfoDlg.h"
#include "ConfigDlg.h"

#include "ProcessListDlg.h"
#include "AddressListDlg.h"

#include "MemEdit.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

PVOID m_pData;			//目标数据,用于向底层类传递数据
DWORD dwDataLength;		//字长
// CGameMasterView
extern HANDLE hProcess;	//当前进程句柄

int m_nLockHz;			//锁定频率
int m_nWaitTime;		//重搜索等待时间
BOOL m_bAutoResearch;	//是否重搜索
int m_nResearchTimes;	//重搜索次数

IMPLEMENT_DYNCREATE(CGameMasterView, CFormView)

BEGIN_MESSAGE_MAP(CGameMasterView, CFormView)
	ON_BN_CLICKED(IDC_BUTTON_SEARCH, OnBnClickedButtonSearch)
	ON_BN_CLICKED(IDC_BUTTON_NEW, OnBnClickedButtonNew)
	ON_BN_CLICKED(IDC_BUTTON_DELETE, OnBnClickedButtonDelete)
	ON_BN_CLICKED(IDC_BUTTON_PROINFO, OnBnClickedButtonProinfo)
	ON_BN_CLICKED(IDC_BUTTON_CONFIG, OnBnClickedButtonConfig)
	ON_BN_CLICKED(IDC_BUTTON_RESET, OnBnClickedButtonReset)
	ON_EN_KILLFOCUS(IDC_EDIT_SEARCHDATA, OnEnKillfocusEditSearchdata)
	ON_BN_CLICKED(IDC_BUTTON_PAUSE_CONTINUE, OnBnClickedButtonPauseContinue)
	ON_BN_CLICKED(IDC_BUTTON_STOP, OnBnClickedButtonStop)
	ON_BN_CLICKED(IDC_BUTTON_MEMEDIT, OnBnClickedButtonMemedit)
END_MESSAGE_MAP()

// CGameMasterView 构造/析构

CGameMasterView::CGameMasterView()
	: CFormView(CGameMasterView::IDD)
	, m_nSearchData(10)
	, m_strProcess(_T(""))
{
	// TODO: 在此处添加构造代码
	dataLength = DATA_LENTH_DWORD;
}

CGameMasterView::~CGameMasterView()
{
}

void CGameMasterView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_EDIT_SEARCHDATA, m_nSearchData);
	DDX_Text(pDX, IDC_EDIT_WNDTITILE, m_strProcess);
	DDX_Control(pDX, IDC_TAB_TASK, m_taskTab);
}

BOOL CGameMasterView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或
	// 样式

	return CFormView::PreCreateWindow(cs);
}

//初始化视图
void CGameMasterView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();

	GetDlgItem(IDC_EDIT_WNDTITILE)->EnableWindow(FALSE);
	GetDlgItem(IDC_BUTTON_DELETE)->EnableWindow(FALSE);
	((CButton*)GetDlgItem(IDC_RADIO_DWORD))->SetCheck(1);

	//将初始配置写入注册表
	if(!ReadReg())
	{
		m_bAutoResearch = FALSE;
		m_nLockHz = 100;
		m_nResearchTimes = 3;
		m_nWaitTime = 100;
		WriteReg();
	}
}


// CGameMasterView 诊断

#ifdef _DEBUG
void CGameMasterView::AssertValid() const
{
	CFormView::AssertValid();
}

void CGameMasterView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

CGameMasterDoc* CGameMasterView::GetDocument() const // 非调试版本是内联的
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGameMasterDoc)));
	return (CGameMasterDoc*)m_pDocument;
}
#endif //_DEBUG


// CGameMasterView 消息处理程序

//搜索,设定字长及目标数据,同时将搜索事件设定为有信号
void CGameMasterView::OnBnClickedButtonSearch()
{
	// TODO: 在此添加控件通知处理程序代码
	
	if(m_strProcess == "")
		OnBnClickedButtonNew();
	if(m_strProcess == "")
		return ;

	CString strData;
	GetDlgItem(IDC_EDIT_SEARCHDATA)->GetWindowText(strData);
	int length = strData.GetLength();
	SetLength();			//设定字长,然后通过字长决定传整型还是字符传
	if(dataLength != 0)
	{
		char c;
		for(int i=0;i<length;i++)
		{
			c = strData[i];
			if(c<48 || c>57)
			{
				AfxMessageBox("无效字符");
				return ;
			}
		}
		UpdateData();
		m_pData = (PVOID)m_nSearchData;
		if(m_pData == 0)
		{
			if(::MessageBox(NULL,"第 1 次就搜索 0 要花费很长很长时间,请慎重考虑\n是否确定?",
				"警告",MB_YESNO|MB_ICONWARNING) == IDNO)
				return ;
		}

	}
	else
	{
		m_pData = malloc(strData.GetLength());
		strcpy((char *)m_pData,strData);
	}
	
	dwDataLength = dataLength;

	//打开并设定搜索事件
	HANDLE hsearchEvent = OpenEvent(EVENT_ALL_ACCESS,FALSE,m_taskTab.GetCurTitle());
	SetEvent(hsearchEvent);
}

//新建任务,通过调用 CSheetTabCtrl::NewPage 向 Tab 控件加入页面并创建任务
void CGameMasterView::OnBnClickedButtonNew()
{
	// TODO: 在此添加控件通知处理程序代码
	if(m_taskTab.GetItemCount() == 0)
	{
		CProcessListDlg dlg;
		if(dlg.DoModal() == IDCANCEL)
		{
			return ;
		}
		m_strProcess = dlg.currentString;
//		proId = GetProcessId(hProcess);
		UpdateData(FALSE);
		GetDlgItem(IDC_BUTTON_DELETE)->EnableWindow();
	}

	m_taskTab.NewPage();
}

//删除任务
void CGameMasterView::OnBnClickedButtonDelete()
{
	// TODO: 在此添加控件通知处理程序代码
	m_taskTab.DeletePage();
	if(m_taskTab.GetItemCount() == 0)
		GetDlgItem(IDC_BUTTON_DELETE)->EnableWindow(FALSE);
}

//设定字长
void CGameMasterView::SetLength()
{
	CButton *pRadio = (CButton*)GetDlgItem(IDC_RADIO_DWORD);
	if(pRadio->GetCheck())
		dataLength = DATA_LENTH_DWORD;
	else
	{
		pRadio = (CButton*)GetDlgItem(IDC_RADIO_BYTE);
		if(pRadio->GetCheck())
			dataLength = DATA_LENTH_BYTE;
		else
		{
			pRadio = (CButton*)GetDlgItem(IDC_RADIO_WORD);
			if(pRadio->GetCheck())
				dataLength = DATA_LENTH_WORD;
			else
				dataLength = DATA_LENTH_UNKNOWN;
		}
	}
}

//读写注册表
BOOL CGameMasterView::ReadReg()
{
	HKEY hKey;
	LONG ret = RegOpenKey(HKEY_LOCAL_MACHINE,
		_T("SOFTWARE\\GameMasterConfig"), &hKey);
	if(ret != ERROR_SUCCESS)
	{
		return FALSE;
	}

	DWORD dwType, dwSize = sizeof(ULONG);
	RegQueryValueEx(hKey, _T("LockFrequence"), 0, &dwType, (BYTE*)&m_nLockHz, &dwSize);
	RegQueryValueEx(hKey, _T("AutoReSearch"), 0, &dwType, (BYTE*)&m_bAutoResearch, &dwSize);
	RegQueryValueEx(hKey, _T("ResearchInterval"), 0, &dwType, (BYTE*)&m_nWaitTime, &dwSize);
	RegQueryValueEx(hKey, _T("ResearchTimes"), 0, &dwType, (BYTE*)&m_nResearchTimes, &dwSize);
	
	RegCloseKey(hKey);
	return TRUE;

}

BOOL CGameMasterView::WriteReg()
{
	HKEY hKey;
	LONG ret = RegCreateKey(HKEY_LOCAL_MACHINE,
		_T("SOFTWARE\\GameMasterConfig"), &hKey);
	if(ret != ERROR_SUCCESS)
	{
		return FALSE;
	}

	DWORD dwType=REG_DWORD, dwSize = sizeof(ULONG);
	RegSetValueEx(hKey, _T("LockFrequence"),0, dwType, (BYTE*)&m_nLockHz, dwSize);
	RegSetValueEx(hKey, _T("AutoReSearch"),0, dwType, (BYTE*)&m_bAutoResearch, dwSize);
	RegSetValueEx(hKey, _T("ResearchInterval"),0, dwType, (BYTE*)&m_nWaitTime, dwSize);
	RegSetValueEx(hKey, _T("ResearchTimes"),0, dwType, (BYTE*)&m_nResearchTimes, dwSize);
	
	RegCloseKey(hKey);
	return TRUE;

}

//显示进程内存信息
void CGameMasterView::OnBnClickedButtonProinfo()
{
	// TODO: 在此添加控件通知处理程序代码


	CProInfoDlg processDlg(NULL,hProcess); 
	processDlg.DoModal();
	
}

//系统配置
void CGameMasterView::OnBnClickedButtonConfig()
{
	// TODO: 在此添加控件通知处理程序代码
	CConfigDlg n_configDlg(NULL,m_nLockHz,m_bAutoResearch,m_nWaitTime,m_nResearchTimes);
	if(n_configDlg.DoModal()==IDOK)
	{
		m_nLockHz=n_configDlg.m_eLockHz;
        m_bAutoResearch=n_configDlg.m_bIsAuto;
		m_nWaitTime=n_configDlg.m_eWaitTime;
        m_nResearchTimes=n_configDlg.m_eTimes; 
		WriteReg();


	}
}

//清空当前任务的搜索结果
void CGameMasterView::OnBnClickedButtonReset()
{
	// TODO: 在此添加控件通知处理程序代码
	if(!m_taskTab.GetItemCount() || !m_taskTab.GetCurList().GetItemCount())
		return ;
	if(::MessageBox(NULL,"该操作会清空当前的搜索结果\n是否继续?","警告",MB_YESNO|MB_ICONWARNING) == IDNO)
		return ;
    
	m_taskTab.GetCurArray().RemoveAll();
	m_taskTab.GetCurList().DeleteAllItems();
}

void CGameMasterView::OnEnKillfocusEditSearchdata()
{
	// TODO: 在此添加控件通知处理程序代码

	CString strData;
	GetDlgItem(IDC_EDIT_SEARCHDATA)->GetWindowText(strData);
	int length = strData.GetLength();
	char c;
	for(int i=0;i<length;i++)
	{
		c = strData[i];
		if(c<48 || c>57)
			return ;
	}
	UpdateData();
}

void CGameMasterView::OnBnClickedButtonPauseContinue()
{
	// TODO: 在此添加控件通知处理程序代码
//	int index = m_taskTab.GetCurSel();
//	HANDLE hSearchThread = m_taskTab.GetCurTask()->GetSearchHandle();
//	SuspendThread(hSearchThread);
}

void CGameMasterView::OnBnClickedButtonStop()
{
	// TODO: 在此添加控件通知处理程序代码
}


void CGameMasterView::OnBnClickedButtonMemedit()
{

	
	if(m_taskTab.GetCurSel() == -1)
	{
		AfxMessageBox("请先选定一个内存地址!");
		return;
	}

	if(m_taskTab.GetCurList().GetSelectionMark() == -1)
	{
		AfxMessageBox("请先选定一个内存地址!");
		return;
	}


	MemEdit memEditDlg;
	memEditDlg.m_dwbaseAddr = m_taskTab.GetCurAddress();
	memEditDlg.DoModal();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -