📄 齐卡卡dlg.cpp
字号:
// 齐卡卡Dlg.cpp : implementation file
//
#include "stdafx.h"
#include "齐卡卡.h"
#include "齐卡卡Dlg.h"
#include "ztHookApi.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define GetThreadTimer 1
#define ShowStateTimer 2
#define STATETIMER1 3
#define STATETIMER2 4
#define STATETIMER3 5
#define SKILLTIMER 6
#define AUTOWORKTIMER 7
#define AUTOPICKUPTIMER 8
DWORD WINAPI GetThreadProc(LPVOID lpParameter);//声明线程涵数,处理更新数据
DWORD WINAPI SetAuto(LPVOID lpParameter);//自动打怪和捡物线程
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
stMyInfoNpc InfoNpc; //村桩NPC
stMyInfoByRole InfoByRole; //附进玩家
stMyInfoActiveNpc InfoActiveNpc; //附近怪物
stMyInfoRole InfoMyRole; //玩家自已的角色信息
stMyInfoByProp InfoByProp; //附近道具
stInfoSelObject InfoSelObject; //选中对像
HWND hWndZT=NULL; //征途客户端窗口句柄
DWORD dwProcessIDZT=NULL;//征途进程ID
HANDLE hProcessZT=NULL; //征途进程句柄
BOOL bStart=NULL; //标识是否开始使用外挂
DWORD dwThreadIDZT=NULL;//征途线程ID
CRITICAL_SECTION stCS; //临界块
HANDLE hSkillThread=NULL; //
bool bControlAuto=NULL; //控制自动打怪线程
POINT AutoSetPoint;//打怪中心点
int nRange=50;//范围
HWND hBitMapWnd;//用来画图的制作窗口句柄
DWORD hPre=NULL;//上一次杀死的怪的标识
bool bFixPoint=NULL;//定点打怪标识
stInfoPickUp InfoPickUp;
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyDlg dialog
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMyDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMyDlg)
m_StateEdit1 = 10;
m_StateEdit2 = 10;
m_StateEdit3 = 10;
m_SkillEdit1 = 100;
m_SkillEdit2 = 100;
m_SkillEdit3 = 100;
m_HpEdit = 500;
m_MpEdit = 50;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);
}
void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMyDlg)
DDX_Control(pDX, IDC_GOODSLIST, m_GoodsList);
DDX_Control(pDX, IDC_SKILLCOMBO3, m_SkillCombo3);
DDX_Control(pDX, IDC_STATECOMBO3, m_StateCombo3);
DDX_Control(pDX, IDC_STATECOMBO2, m_StateCombo2);
DDX_Control(pDX, IDC_STATECOMBO1, m_StateCombo1);
DDX_Control(pDX, IDC_SKILLCOMBO2, m_SkillCombo2);
DDX_Control(pDX, IDC_SKILLCOMBO1, m_SkillCombo1);
DDX_Control(pDX, IDC_MPCOMBO, m_MpCombo);
DDX_Control(pDX, IDC_HPCOMBO, m_HpCombo);
DDX_Text(pDX, IDC_STATEEDIT1, m_StateEdit1);
DDV_MinMaxUInt(pDX, m_StateEdit1, 1, 100000);
DDX_Text(pDX, IDC_STATEEDIT2, m_StateEdit2);
DDV_MinMaxUInt(pDX, m_StateEdit2, 1, 10000);
DDX_Text(pDX, IDC_STATEEDIT3, m_StateEdit3);
DDV_MinMaxUInt(pDX, m_StateEdit3, 1, 100000);
DDX_Text(pDX, IDC_SKILLEDIT1, m_SkillEdit1);
DDV_MinMaxUInt(pDX, m_SkillEdit1, 0, 100000);
DDX_Text(pDX, IDC_SKILLEDIT2, m_SkillEdit2);
DDV_MinMaxUInt(pDX, m_SkillEdit2, 1, 100000);
DDX_Text(pDX, IDC_SKILLEDIT3, m_SkillEdit3);
DDV_MinMaxUInt(pDX, m_SkillEdit3, 1, 100000);
DDX_Text(pDX, IDC_HPEDIT, m_HpEdit);
DDX_Text(pDX, IDC_MPEDIT, m_MpEdit);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
//{{AFX_MSG_MAP(CMyDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_TIMER()
ON_BN_CLICKED(IDC_START, OnStart)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_GOODSBUTTON, OnGoodsbutton)
ON_BN_CLICKED(IDC_GOODSBUTTON2, OnGoodsbutton2)
ON_LBN_SELCHANGE(IDC_GOODSLIST, OnSelchangeGoodslist)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyDlg message handlers
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
//初使化附近怪物地址
InfoActiveNpc.EndAddress=0x00690308;
InfoActiveNpc.StartAddress=0x00690304;
//初始化附进玩家地址
InfoByRole.StartAddress=0x00690314;
InfoByRole.EndAddress=0x00690318;
//初始化村庄NPC地址
InfoNpc.StartAddress=0x00690354;
InfoNpc.EndAddress=0x00690358;
//初始化附近道具地址Prop
InfoByProp.StartAddress=0x00690334;
InfoByProp.EndAddress=0x00690338;
//初始化我的角色信息地址
InfoMyRole.dwBaseAddress=0x00690370;
//初始化当前选择对像的信息地址
InfoSelObject.dwAddressBase=0x00690374;
//查找征途客户端是否运行
hWndZT=::FindWindow("zhengtu_client",NULL);
if(NULL==hWndZT)
{
::MessageBox(this->m_hWnd,"请先进入游戏,再运行飞翔软件!","错误",MB_OK);
::PostMessage(this->m_hWnd,WM_CLOSE,NULL,NULL);
return false;
}
//获得进程ID
dwThreadIDZT=::GetWindowThreadProcessId(hWndZT,&dwProcessIDZT);
if(NULL==dwThreadIDZT)
{
::MessageBox(this->m_hWnd,"获得进程ID失败!","失败",MB_OK);
::PostMessage(this->m_hWnd,WM_CLOSE,NULL,NULL);
return false;
}
//获得进程句柄
hProcessZT=::OpenProcess(PROCESS_ALL_ACCESS,NULL,dwProcessIDZT);
if(NULL==hProcessZT)
{
::MessageBox(this->m_hWnd,"获得进程句柄失败!","失败",MB_OK);
::PostMessage(this->m_hWnd,WM_CLOSE,NULL,NULL);
return false;
}
::InitializeCriticalSection(&stCS);
::InitHook(true,dwThreadIDZT,hProcessZT);
::GetCurrentProcess();
HANDLE hThread=::CreateThread(NULL,NULL,GetThreadProc,NULL,NULL,NULL);
::CloseHandle(hThread);
SetTimer(ShowStateTimer,1000,NULL);
//初使化组合框
m_HpCombo.SetCurSel(1);
m_MpCombo.SetCurSel(2);
m_StateCombo1.SetCurSel(3);
m_StateCombo2.SetCurSel(4);
m_StateCombo3.SetCurSel(5);
m_SkillCombo1.SetCurSel(6);
m_SkillCombo2.SetCurSel(7);
m_SkillCombo3.SetCurSel(8);
//初使化列表框
m_GoodsList.AddString("升级宝石");
m_GoodsList.AddString("铁仙丹");
m_GoodsList.AddString("甘草露");
return TRUE; // return TRUE unless you set the focus to a control
}
void CMyDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CMyDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CMyDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
//实现线程涵数
DWORD WINAPI GetThreadProc(LPVOID lpParameter)
{
while (true)
{
::EnterCriticalSection(&stCS);
////////////////////////////////////////////////////////////////////////////////////////////
//********************************更新附玩家信息********************************///////
//附近玩家.开始地址值 和.结束地址值 赋值
::ReadProcessMemory(hProcessZT,(HANDLE)InfoByRole.StartAddress,&InfoByRole.StartAddressVar,4,NULL);
::ReadProcessMemory(hProcessZT,(HANDLE)InfoByRole.EndAddress,&InfoByRole.EndAddressVar,4,NULL);
InfoByRole.nByRoleCount=(InfoByRole.EndAddressVar-InfoByRole.StartAddressVar)/4;
if(NULL!=InfoByRole.nByRoleCount)
{
::ReadProcessMemory(hProcessZT,(HANDLE)InfoByRole.StartAddressVar,&InfoByRole.lpstByRole,InfoByRole.nByRoleCount*4,NULL);
}
for(int i=0;i<(int)InfoByRole.nByRoleCount;i++)
{
::ReadProcessMemory(hProcessZT,(HANDLE)InfoByRole.lpstByRole[i],&InfoByRole.stByRole[i],sizeof(stByRole),NULL);
}
////////////////////////////////////////////////////////////////////////////////////////////
//********************************更新附怪物信息********************************///////
::ReadProcessMemory(hProcessZT,(HANDLE)InfoActiveNpc.StartAddress,&InfoActiveNpc.StartAddressVar,4,NULL);
::ReadProcessMemory(hProcessZT,(HANDLE)InfoActiveNpc.EndAddress,&InfoActiveNpc.EndAddressVar,4,NULL);
InfoActiveNpc.nANpcCount=(InfoActiveNpc.EndAddressVar-InfoActiveNpc.StartAddressVar)/4;
if(NULL!=InfoActiveNpc.nANpcCount)
{
::ReadProcessMemory(hProcessZT,(HANDLE)InfoActiveNpc.StartAddressVar,&InfoActiveNpc.lpANpc,InfoActiveNpc.nANpcCount*4,NULL);
}
for(i=0;i<(int)InfoActiveNpc.nANpcCount;i++)
{
::ReadProcessMemory(hProcessZT,(HANDLE)InfoActiveNpc.lpANpc[i],&InfoActiveNpc.stANpc[i],sizeof(stActiveNpc),NULL);
}
///////////////////////////////////////////////////////////////////////////////////////////
//********************************更新附近道具信息********************************///////
::ReadProcessMemory(hProcessZT,(HANDLE)InfoByProp.StartAddress,&InfoByProp.StartAddressVar,4,NULL);
::ReadProcessMemory(hProcessZT,(HANDLE)InfoByProp.EndAddress,&InfoByProp.EndAddressVar,4,NULL);
InfoByProp.nByPropCount=(InfoByProp.EndAddressVar-InfoByProp.StartAddressVar)/4;
if(NULL!=InfoByProp.nByPropCount)
{
::ReadProcessMemory(hProcessZT,(HANDLE)InfoByProp.StartAddressVar,&InfoByProp.lpstByProp,InfoByProp.nByPropCount*4,NULL);
}
for(i=0;i<(int)InfoByProp.nByPropCount;i++)
{
::ReadProcessMemory(hProcessZT,(HANDLE)InfoByProp.lpstByProp[i],&InfoByProp.nProp[i],sizeof(stByProp),NULL);
}
///////////////////////////////////////////////////////////////////////////////////////////
/////////////********************更新附近NPC信息*******************************////////////
::ReadProcessMemory(hProcessZT,(HANDLE)InfoNpc.StartAddress,&InfoNpc.StartAddressVar,4,NULL);
::ReadProcessMemory(hProcessZT,(HANDLE)InfoNpc.EndAddress,&InfoNpc.EndAddressVar,4,NULL);
InfoNpc.nNpcCount=InfoNpc.EndAddressVar-InfoNpc.StartAddressVar;
if(NULL != InfoNpc.nNpcCount)
{
::ReadProcessMemory(hProcessZT,(HANDLE)InfoNpc.StartAddressVar,&InfoNpc.stNpc,InfoNpc.nNpcCount,NULL);
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////*******************更新玩家自已角色信息***********************////////////////
::ReadProcessMemory(hProcessZT,(HANDLE)InfoMyRole.dwBaseAddress,&InfoMyRole.dwStartAddress,4,NULL);
::ReadProcessMemory(hProcessZT,(HANDLE)InfoMyRole.dwStartAddress,&InfoMyRole.InfoRole,sizeof(stMyRole),NULL);
::ReadProcessMemory(hProcessZT,(HANDLE)(InfoMyRole.dwStartAddress+0x652),&InfoMyRole.nCurrentMp,4,NULL);
::ReadProcessMemory(hProcessZT,(HANDLE)(InfoMyRole.dwStartAddress+0x656),&InfoMyRole.nAllMp,4,NULL);
////////////////////////////////////////////////////////////////////////////////////////////////
//////**************************更新当前选择的对像**********************8/////////////
::ReadProcessMemory(hProcessZT,(HANDLE)InfoSelObject.dwAddressBase,&InfoSelObject.dwStartAddress,4,NULL);
if(NULL !=InfoSelObject.dwStartAddress)
{
::ReadProcessMemory(hProcessZT,(HANDLE)InfoSelObject.dwStartAddress,&InfoSelObject.SelInfo,sizeof(stByRole),NULL);
}
::LeaveCriticalSection(&stCS);
::Sleep(600);
}
return true;
}
void CMyDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
int nSelect;
switch(nIDEvent)
{
case ShowStateTimer:
char szTemp[60];
::EnterCriticalSection(&stCS);
//更新自已的角色信息
::SetDlgItemText(this->m_hWnd,IDC_MYROLENAME,::InfoMyRole.InfoRole.szName);
::wsprintf(szTemp,"%d/%d",::InfoMyRole.InfoRole.nCurrentHp,::InfoMyRole.InfoRole.nAllHp);
::SetDlgItemText(this->m_hWnd,IDC_MYROLEHP,szTemp);
::wsprintf(szTemp,"%d/%d",::InfoMyRole.nCurrentMp,::InfoMyRole.nAllMp);
TRACE("cMp=%08x,aMp=%08x",::InfoMyRole.nCurrentMp,::InfoMyRole.nAllMp);
::SetDlgItemText(this->m_hWnd,IDC_MYROLEMP,szTemp);
//更新选中的角色信息
::SetDlgItemText(this->m_hWnd,IDC_SELNAME,::InfoSelObject.SelInfo.szName);
::wsprintf(szTemp,"%d/%d",::InfoSelObject.SelInfo.nCurrentHp,::InfoSelObject.SelInfo.nAllHp);
::SetDlgItemText(this->m_hWnd,IDC_SELHP,szTemp);
::wsprintf(szTemp,"%d/%d",::InfoSelObject.SelInfo.nCurrentMp,::InfoSelObject.SelInfo.nAllMp);
::SetDlgItemText(this->m_hWnd,IDC_SELMP,szTemp);
::LeaveCriticalSection(&stCS);
//判断是否要加血
if(InfoMyRole.InfoRole.nCurrentHp<(::GetDlgItemInt(this->m_hWnd,IDC_HPEDIT,NULL,NULL))
&& BST_CHECKED==::IsDlgButtonChecked(this->m_hWnd,IDC_HPCHECK))
{
//喝血
nSelect=m_HpCombo.GetCurSel();
::SetKeyData(true,0x70+nSelect);
::SendMessage(hWndZT,WM_KEYDOWN,0x70+nSelect,::MapVirtualKey(0x70+nSelect,NULL));
::SetKeyData(false,NULL);
}
//判断是否要加蓝
if(InfoMyRole.nCurrentMp<(::GetDlgItemInt(this->m_hWnd,IDC_MPEDIT,NULL,NULL))
&& BST_CHECKED==::IsDlgButtonChecked(this->m_hWnd,IDC_MPCHECK))
{
//喝蓝
nSelect=m_MpCombo.GetCurSel();
::SetKeyData(true,0x70+nSelect);
::SendMessage(hWndZT,WM_KEYDOWN,0x70+nSelect,::MapVirtualKey(0x70+nSelect,NULL));
::SetKeyData(false,NULL);
}
break;
case STATETIMER1:
nSelect=m_StateCombo1.GetCurSel();
::SetKeyData(true,0x70+nSelect);
::SendMessage(hWndZT,WM_KEYDOWN,0x70+nSelect,::MapVirtualKey(0x70+nSelect,NULL));
::SetKeyData(false,NULL);
break;
case STATETIMER2:
nSelect=m_StateCombo2.GetCurSel();
::SetKeyData(true,0x70+nSelect);
::SendMessage(hWndZT,WM_KEYDOWN,0x70+nSelect,::MapVirtualKey(0x70+nSelect,NULL));
::SetKeyData(false,NULL);
break;
case STATETIMER3:
nSelect=m_StateCombo3.GetCurSel();
::SetKeyData(true,0x70+nSelect);
::SendMessage(hWndZT,WM_KEYDOWN,0x70+nSelect,::MapVirtualKey(0x70+nSelect,NULL));
::SetKeyData(false,NULL);
break;
case SKILLTIMER:
if(InfoMyRole.nCurrentMp>(::GetDlgItemInt(this->m_hWnd,IDC_SKILLEDIT1,NULL,NULL)))
{
nSelect=m_SkillCombo1.GetCurSel();
::SetKeyData(true,0x70+nSelect);
::SendMessage(hWndZT,WM_KEYDOWN,0x70+nSelect,::MapVirtualKey(0x70+nSelect,NULL));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -