Einzelnen Beitrag anzeigen

Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.679 Beiträge
 
Delphi 5 Professional
 
#5

AW: Benachrichtigung wenn Prozess gestartet wurde

  Alt 2. Jun 2012, 19:22
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
  Mit Zitat antworten Zitat