我正尝试在VisualC++中为ReadProcessMemory和WriteProcessMemory创建自己的函数,所以我不必每次都创建新的函数调用时输入所有信息。这个项目是Windows窗体。这里的问题通过函数传递值
void Read(DWORD Add, int Value);
private: System::Void btnP1Money_Click_1(System::Object^ sender, System::EventArgs^e)
{
int BigMoney = 100000;
int GetMoneyValue;
DWORD MonAddr = 0x180A6C8;
Read(MonAddr, GetMoneyValue);
}
void Read(DWORD Add, int Value)
{
HWND window = FindWindow(0, _T("Process Window Name"));
DWORD pID = NULL;
DWORD base = dwGetModuleBaseAddress(pID, _T("Game.exe"));
HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID);
GetWindowThreadProcessId(window, &pID);
ReadProcessMemory(handle, (LPCVOID)(base+Add), &Value, 4, NULL);
}
在游戏中的值是500,但是从阅读()的返回值是0。不知道我做错了。我不想每次在每个按钮单击和复选框勾选时在Read()函数中定义所有内容。
感谢
谢谢你的回复弗拉德。这正是我对标题所做的。我将函数声明更改为void Read(DWORD Add,int&Value);和函数定义中的标题无效Read(DWORD Add,int&Value){//相同的代码},它会产生那些奇怪的结果。任何想法为什么?谢谢 – Syperus 2013-03-04 18:03:01
@Syperus可以发布ReadProcessMemory函数代码吗? – VladL 2013-03-04 19:15:11
从WINBASE.H'BOOL WINAPI ReadProcessMemory( __in HANDLE hProcess, __in LPCVOID lpBaseAddress, __out_bcount_part(n大小,* lpNumberOfBytesRead)LPVOID lpBuffer, __in SIZE_T n大小, __out_opt SIZE_T * lpNumberOfBytesRead );' – Syperus 2013-03-05 02:03:34