Danke Jungs, manchmal reicht einem ein Stichwort damit man weiterkommt
In dem Fall CreateToolhelp32Snapshot (übrigens wirklich kein treffender Name für diese Routine). Hier eine Delphi-Übersetzung des Sample-Codes der im
PSDK hinterlegt ist:
Delphi-Quellcode:
uses
tlhelp32;
procedure TForm1.Button1Click(Sender: TObject);
var
hProcessSnap: THandle;
hProcess: THandle;
pe32: PROCESSENTRY32;
dwPriorityClass: DWord;
begin
Memo1.Lines.BeginUpdate;
try
hProcessSnap:= CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
if hProcessSnap = INVALID_HANDLE_VALUE then begin
Memo1.Lines.Add(#13#10#13#10'CreateToolhelp32Snapshot (of processes)');
Exit;
end;
pe32.dwSize:= SizeOf(PROCESSENTRY32);
if not Process32First(hProcessSnap, pe32) then begin
Memo1.Lines.Add(#13#10#13#10'Error: Process32First');
CloseHandle(hProcessSnap);
Exit;
end;
repeat
Memo1.Lines.Add(#13#10'=====================================================');
Memo1.Lines.Add(Format('PROCESS NAME: %s', [pe32.szExeFile]));
Memo1.Lines.Add('-----------------------------------------------------');
dwPriorityClass:= 0;
hProcess:= OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
if hProcess = NULL then begin
Memo1.Lines.Add(#13#10'Error: OpenProcess');
end else begin
dwPriorityClass:= GetPriorityClass(hProcess);
if dwPriorityClass = 0 then begin
Memo1.Lines.Add(#13#10'Error: GetPriorityClass');
CloseHandle(hProcess);
end;
end;
Memo1.Lines.Add(Format(' Process ID = 0x%08X', [pe32.th32ProcessID]));
Memo1.Lines.Add(Format(' Thread count = %d', [pe32.cntThreads]));
Memo1.Lines.Add(Format(' Parent process ID = 0x%08X', [pe32.th32ParentProcessID]));
Memo1.Lines.Add(Format(' Priority base = %d', [pe32.pcPriClassBase]));
Memo1.Lines.Add(Format(' Priority base = %d', [pe32.pcPriClassBase]));
Memo1.Lines.Add(Format(' Executable = %s', [pe32.szExeFile]));
if dwPriorityClass > 0 then begin
Memo1.Lines.Add(Format(' Priority class = %d', [dwPriorityClass]));
end;
until not Process32Next(hProcessSnap, pe32);
CloseHandle(hProcessSnap);
finally
Memo1.Lines.EndUpdate;
end;
end;
Ist erstmal nur eine Dummy-Routine mit Ausgabe in ein Memo. Ich werde mir das jetzt so adaptieren dass ich über den Exe-Namen gehe, an die Process-ID eine Message schicke und mir von dort mit einer Message antworten lasse. So finde ich meine ganzen Ziel-Prozesse.