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

📄 齐卡卡dlg.cpp

📁 arcAE中自己编写面积,长度测量工具,返回测量结果
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 齐卡卡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 + -