📄 gamemasterview.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 + -