AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Benachrichtigung wenn Prozess gestartet wurde
Thema durchsuchen
Ansicht
Themen-Optionen

Benachrichtigung wenn Prozess gestartet wurde

Ein Thema von diabox · begonnen am 2. Jun 2012 · letzter Beitrag vom 15. Jul 2012
 
Benutzerbild von Dalai
Dalai
Online

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

AW: Benachrichtigung wenn Prozess gestartet wurde

  Alt 2. Jun 2012, 18: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
 

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz