我正在编写代码来扫描另一个进程内存。但这不是问题。列出使用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位。
答案 0 :(得分:3)
您正在使用管理权限运行IDE,并且当您从调试器启动时,您的程序会继承这些权限。
除非您的程序需要管理权限,否则您也不需要提升IDE。它应该能够以普通用户身份运行,然后您的程序将获得与您自己运行时相同的列表。
答案 1 :(得分:0)
看起来你只在os64为真时初始化proc32。