我已成功通过C ++从游戏中读取数据。现在我需要读取它,以便GUI始终以正确的值更新。我有两个问题:
我是否使用无限循环?
while(gameOn) {
ReadAddress(1); //Example
ReadAddress(2); //Example
ReadAddress(3); //Example
ReadAddress(4); //Example
....
ReadAddress(100); //Example
Sleep(200);
}
正如您所看到的,while循环最终会读取很多游戏值。由于值是连续的(我怀疑它是一个结构),我应该只读取100个字节并解析它吗?因此,该选项一次读取100个字节并相应地处理数据或每次读取1个字节100次。
顺便说一句,这是我的阅读功能
int Process::memoryReadByte(int memoryAddress) {
unsigned char buffer = 0;
SIZE_T NumberOfBytesToRead = sizeof(buffer); //this is equal to 1
SIZE_T NumberOfBytesActuallyRead;
BOOL succeed = ReadProcessMemory(hProcess, (LPCVOID)(baseAddress + memoryAddress), &buffer, NumberOfBytesToRead, &NumberOfBytesActuallyRead);
if (!succeed || NumberOfBytesActuallyRead != NumberOfBytesToRead) {
return 0;
}
return buffer;
}
无限循环好吗?我不想让我的游戏变得迟钝。无限的循环听起来很可怕。
答案 0 :(得分:0)
是的,您确实需要使用循环读取内存来保持本地副本更新。
如果内存是连续的,则应在一次调用ReadProcessMemory()的情况下读取所有连续的内存,然后解析本地缓冲区。这将使您的程序更高效,因为ReadProcessMemory具有多个内部API调用和安全检查等开销。