我正在编写代码来扫描另一个进程内存。但这不是这里的问题。要列出正在运行的进程,我使用的是 Process32First/Process32Next。但是当我在编译器调试中运行它时,它会获取所有进程(包括其他用户,如系统进程),但是当我只运行 .exe 时,只能从我的用户那里获取进程。代码的延伸如下
Handle:= CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
Struct.dwSize:=Sizeof(TProcessEntry32);
Process32First(Handle, Struct);
repeat
Memo2.Lines.Append(Struct.szExeFile);
MemStart:= 0;
PID:= Struct.th32ProcessID;
PIDHandle:= OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_OPERATION or
PROCESS_VM_READ, false, PID);
if OS64 = true then
begin
if IsProcWow64 then
begin
Proc32:= true;
end
else
Proc32:= false;
end;
if (Proc32 = true) and (POS(Struct.szExeFile, Application.ExeName) = 0) then
begin
Memo1.Lines.Append('Process:: '+Struct.szExeFile+' - Scanning');
CatchYa(Struct.szExeFile);
end;
CloseHandle(PIDHandle);
until (not Process32Next(Handle,Struct));
如您所见,我正在检查 64 位进程,因为我只想要 32 位。