网络上搜集的一些信息:
在 Delphi Xe2中 ReadProcessMemory 和 WriteProcessMemory等一些api的最后一个参数由原来的 var lpNumberOfBytesRead: DWORD 变为了一个指针按他的提示是 type void好像是这样了,
'>0rp\jC
THandle的定义已经是一个指针而不是像原来的 THandle = Cardinal了; "j] r
所以 =!Ce#p?h,
ReadProcessMemory(PHandle,Pinteger(FirstADD),FirstADDZ,nSize,lpNumberOfBytesRead); ds|L'7
第一个参数不能是 THandle无类型指针, PHandle仍然是 Cardinal无符号整型;第三个参数是个指针类型需要用@取变量地。所以应该这样 t,>j{SK~
var .W1i3Z6g
lpNumberOfBytesRead: THandle; \CDzVO0^
FirstADDZ, PHandle, FirstADD: Cardinal; JMIS*njq^
ReadProcessMemory(PHandle, Pointer(FirstADD), @FirstADDZ, 4, lpNumberOfBytesRead); 虽然已经在目录下看不到他的源码了,但鼠标放在上面会有提示的啊,还有多看看编译提示的错误!!!
THandle的定义已经是一个指针而不是像原来的 THandle = Cardinal了; "j] r
所以 =!Ce#p?h,
ReadProcessMemory(PHandle,Pinteger(FirstADD),FirstADDZ,nSize,lpNumberOfBytesRead); ds|L'7
第一个参数不能是 THandle无类型指针, PHandle仍然是 Cardinal无符号整型;第三个参数是个指针类型需要用@取变量地。所以应该这样 t,>j{SK~
var .W1i3Z6g
lpNumberOfBytesRead: THandle; \CDzVO0^
FirstADDZ, PHandle, FirstADD: Cardinal; JMIS*njq^
ReadProcessMemory(PHandle, Pointer(FirstADD), @FirstADDZ, 4, lpNumberOfBytesRead); 虽然已经在目录下看不到他的源码了,但鼠标放在上面会有提示的啊,还有多看看编译提示的错误!!!
var
SiteNum: DWord;
lByte: Size_T; //这里可以定义为thandle
begin
Gameh := FindWindow(nil, 'QQ游戏');
showmessage(inttostr(Gameh));
GetWindowThreadProcessID(Gameh, Gamepid);
GameProcess := OpenProcess(Process_VM_Read or Process_VM_Write , False, Gamepid);
lByte := 0;
ReadProcessMemory(GameProcess, Pointer($0180017A), @SiteNum, 4, lByte);
//Edit1.Text := inttostr(SiteNum);
end;
SiteNum: DWord;
lByte: Size_T; //这里可以定义为thandle
begin
Gameh := FindWindow(nil, 'QQ游戏');
showmessage(inttostr(Gameh));
GetWindowThreadProcessID(Gameh, Gamepid);
GameProcess := OpenProcess(Process_VM_Read or Process_VM_Write , False, Gamepid);
lByte := 0;
ReadProcessMemory(GameProcess, Pointer($0180017A), @SiteNum, 4, lByte);
//Edit1.Text := inttostr(SiteNum);
end;