前提是需要用CE來(lái)獲取陽(yáng)光的地址求晶,注意第一版的地址是動(dòng)態(tài)地址爵赵,下次游戲重啟后秕铛,地址就會(huì)變掉。
#include <iostream>
#include <windows.h>
using namespace std;
HWND hwnd_Game;
DWORD ProcessID;
HANDLE h_process;
/*
** 思路:先獲取游戲信息娄柳,再進(jìn)行修改。
** 1阳掐、根據(jù)游戲窗口名稱(chēng)獲取窗口句柄
** 2始衅、根據(jù)上一步獲取的窗口句柄獲得進(jìn)程ID
** 3、通過(guò)上一步獲取的進(jìn)程ID來(lái)獲取進(jìn)程句柄(修改進(jìn)程里面的內(nèi)存值需要用到進(jìn)程句柄)
*/
void GetGameInfo()
{
hwnd_Game = FindWindow(NULL, L"Plants vs. Zombies");
GetWindowThreadProcessId(hwnd_Game, &ProcessID);
/*
HANDLE
WINAPI
OpenProcess(
_In_ DWORD dwDesiredAccess, 希望獲得這個(gè)進(jìn)程的什么權(quán)限缭保,這里我們填默認(rèn)的PROCESS_ALL_ACCESS就好了
_In_ BOOL bInheritHandle, 是否允許該進(jìn)程句柄繼承汛闸,這里我們默認(rèn)填false
_In_ DWORD dwProcessId 進(jìn)程ID
);
*/
h_process = OpenProcess(PROCESS_ALL_ACCESS, false, ProcessID);
}
void ChangeSunshine(int num)
{
/* WriteProcessMemory函數(shù)原型
BOOL
WINAPI
WriteProcessMemory(
_In_ HANDLE hProcess, 進(jìn)程句柄
_In_ LPVOID lpBaseAddress, 改寫(xiě)的地址
_In_reads_bytes_(nSize) LPCVOID lpBuffer, 改寫(xiě)的值的緩沖區(qū)
_In_ SIZE_T nSize, 緩沖區(qū)的大小
_Out_opt_ SIZE_T* lpNumberOfBytesWritten 實(shí)際寫(xiě)入的長(zhǎng)度(傳出參數(shù))
);
*/
int ret = WriteProcessMemory(h_process, (LPVOID)0x2AF58580, &num, 4, NULL);
if (ret == 0)
{
cout << "修改失敗!" << endl;
}
else
{
cout << "修改成功!" << endl;
}
}
int main1()
{
int n_sunshine_change;
cout << "歡迎使用植物大戰(zhàn)僵尸外掛,請(qǐng)輸入你要修改的陽(yáng)光值:";
cin >> n_sunshine_change;
GetGameInfo();
ChangeSunshine(n_sunshine_change);
system("pause");
return 0;
}
參考:https://blog.csdn.net/xiaokangdream/article/details/79356030