它读取的前三个地址是正确的,最后一个是错误的...忽略垃圾代码我是菜鸟,即使我使用相同的地址作为其他地址返回,我也无法弄清楚为什么第四个地址错误的值...
procedure ReadFirstCard(Address: Integer);
var
Handle,i,a,b,c : Integer;
begin
GetWindowThreadProcessId(FindWindow(nil, PAnsiChar(Client)), @ProcessId);
Handle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
ReadProcessMemory(Handle, Ptr(Address), @NewValue, Data, CardRead);
CloseHandle(Handle);
end;
procedure ReadFirstCardSuit(Address2: Integer);
var
Handle,i,a,b,c : Integer;
begin
GetWindowThreadProcessId(FindWindow(nil, PAnsiChar(Client)), @ProcessId);
Handle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
ReadProcessMemory(Handle, Ptr(Address2), @NewValue2, Data2, CardRead2);
CloseHandle(Handle);
end;
procedure ReadSecondCard(Address3: Integer);
var
Handle,i,a,b,c : Integer;
begin
GetWindowThreadProcessId(FindWindow(nil, PAnsiChar(Client)), @ProcessId);
Handle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
ReadProcessMemory(Handle, Ptr(Address3), @NewValue3, Data3, CardRead3);
CloseHandle(Handle);
end;
procedure ReadSecondCardSuit(Address4: Integer);
var
Handle,i,a,b,c : Integer;
begin
GetWindowThreadProcessId(FindWindow(nil, PAnsiChar(Client)), @ProcessId);
Handle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
ReadProcessMemory(Handle, Ptr(Address4), @NewValue4, Data4, CardRead4);
CloseHandle(Handle);
end;
最佳答案
由于第四个函数的唯一不同之处在于,它使用Data4
作为大小,而不是使用Data1
到Data3
,因此Data4
对于从副本中复制的字节数似乎没有正确的值。目标过程。确保NewValue4
足够大,可以接收整个结果。
您无需检查任何这些API函数的返回值,因此,如果它们失败了,您将一无所知。确保OpenProcess
返回有效的句柄,并确保ReadProcessMemory
返回非零。如果没有,请致电GetLastError
找出原因。