buf:string;
ReadProcessMemory(hProcessHandle, Pointer(Address), @buf, Len, lpNumberOfBytes);
其他都没问题,执行也ok,但是执行好了一旦引用buf程序就出错
比如edit1.text:=buf;
程序就错误
ReadProcessMemory(hProcessHandle, Pointer(Address), @buf, Len, lpNumberOfBytes);
其他都没问题,执行也ok,但是执行好了一旦引用buf程序就出错
比如edit1.text:=buf;
程序就错误
ReadProcessMemory(hProcessHandle, Pointer(Address), PChar(buf[1]), Len, lpNumberOfBytes);
试试看
System Error Codes 299
该怎么解决?
ProcessIDHandle:=GetProcessID(pchar('excel.exe'));
address:=$1;
len:=1;
ReadProcessMemory(hProcessHandle, Pointer(Address), @buf, Len, lpNumberOfBytes);
buf为byte数组[0..3]
窗口句柄取回没有问题,上面写错了,应该是
ReadProcessMemory(processidhandle, Pointer(Address), @buf, Len, lpNumberOfBytes);
ReadProcessMemory(hProcessHandle, Pointer(Address), @buf, 10, lpNumberOfBytes);
System Error Codes 299
Only part of a ReadProcessMemory or WriteProcessMemory request was completed. ERROR_PARTIAL_COPY
var
hProcessHandle: THandle;
lpNumberOfBytes: LongWord;
begin
Result := false;
if ProcessID = 0 then exit; //如果进程不存在,返回 hProcessHandle := OpenProcess(PROCESS_VM_READ, false, ProcessID);
if hProcessHandle = 0 then exit; try
//读进程
if ReadProcessMemory(hProcessHandle, Pointer(Address), buf, Len, lpNumberOfBytes) then
showmessage('getmemok');
showmessage(inttostr(getlasterror()));
finally
CloseHandle(hProcessHandle); end; Result := True;
end;这是读取的函数,程序中用的是
GetProcessMemoryForID(ProcessIDHandle,Address,@buf,len);
var
buf:array [0..9] of char; //这里确定你要读取几个字节 hw := FindWindow(nil,'标题');
if hw = 0 then Exit;
GetWindowThreadProcessId(hw, @pid);
h := OpenProcess(PROCESS_ALL_ACCESS, false, pid);
if h = 0 then
Exit;ReadProcessMemory(h, Pointer(Address), @buf, sizeof(buf), lpNumberOfBytes);
edit1.text:=strpas(buf);
var
s: string;
ok: Bool;
ProcessListHandle: THandle;
ProcessStruct: TProcessEntry32;
begin
Result := 0;
//获得进程列表句柄
ProcessListHandle := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
try
ProcessStruct.dwSize := Sizeof(ProcessStruct);
//获得第一个进程句柄
ok := Process32First(ProcessListHandle, ProcessStruct); while ok do
begin
s := ExtractFileName(ProcessStruct.szExeFile); //获取进程的可执行文件名称
if AnsiCompareText(Trim(s), EXE_Name)=0 then
begin
Result := ProcessStruct.th32ProcessID;
showmessage('ok'); break;
end;
ok := Process32Next(ProcessListHandle, ProcessStruct); //获取下一个进程信息。
end;
finally
CloseHandle(ProcessListHandle); //关闭进程列表句柄
end;
end;
if ReadProcessMemory(h, Pointer(Address), @buf1, sizeof(buf1), lpNumberOfBytes) then
showmessage('ok');
没有出现提示框
showmessage(inttostr(getlasterror()));
错误还是299
可能是地址不存在造成的
net helpmsg 299