Aber es kommt mir falsch vor, dass einem Prozess, der eigentlich nichts tut außer auf einen anderen Prozess zu warten, dauerhaft Rechenzeit zugeteilt werden muss.
OK, dabei stimmen wir überein
.
Zitat:
Ein Event o.ä. wäre mir da lieber als ein dauerhaftes Polling.
In der Tat. Allerdings wüsste ich momentan nicht, wie man das anstellen sollte. Das heißt aber nicht wirklich etwas, denn ich habe in der Richtung viel zu wenig Ahnung.
Zitat:
Stoppst du, wenn Process32Next den richtigen Prozess gefunden hat oder ist es für dein Programm wichtig alle Einträge zu durchlaufen?
Hier mal die relevante Funktion (abgespeckt):
Delphi-Quellcode:
var
hProcSnapshot : THandle;
ProcInfo : TProcessEntry32;
ProzessHandle : HWND;
dummy : DWORD;
begin
hProcSnapshot:= CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
if hProcSnapshot = INVALID_HANDLE_VALUE then Exit;
ProcInfo.dwSize:= SizeOf(TProcessEntry32);
if not Process32First(hProcSnapshot, ProcInfo) then Exit;
repeat
// Filter für bestimmte Prozesse. Wenn Filter leer, dann alle Prozesse
if (LowerCase(ProcInfo.szExeFile) = proz) OR (proz = '') then
begin
if (LowerCase(ProcInfo.szExeFile) <> 'system') then
begin
ProzessHandle:= OpenProcess(PROCESS_QUERY_INFORMATION or
PROCESS_VM_READ, false, ProcInfo.th32ProcessID);
if (ProzessHandle <> 0) then
begin
// hier Hauptaufgabe
end;
CloseHandle(ProzessHandle);
end;
end;
until (not Process32Next(hProcSnapshot, ProcInfo));
CloseHandle(hProcSnapshot);
end;
Die Funktion stellt dabei erstmal eine Liste der aktiven Prozesse zusammen und sammelt Infos über sie (PID, Name, Affinität, Priorität). Diese Liste wird dann im Anschluss verarbeitet (also nochmals durchlaufen) und mit der im Programm vordefinierten Liste der Prozesse verglichen und angewendet (Zugehörigkeit und Priorität zugewiesen).
Beim Durchschauen des Codes ist mir aufgefallen, dass in diesem Teil überhaupt keine Fehlerbehandlung und auch keine Überlaufprüfung vorhanden ist, eieiei. Naja, ich wollte das Programm eh komplett überarbeiten
(aber erst, wenn ich Zeit habe).
MfG Dalai