別のプロセスメモリをスキャンするコードを実行しています。しかし、それはここでの問題ではありません。実行中のプロセスを一覧表示するには、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));
ご覧のとおり、32 ビットのみが必要なため、64 ビット プロセスをチェックしています。