Prozess eindeutig identifizieren

  • Abend.

    Nun, meine Frage ist, wie kann ich einen Prozess exakt erkennen ?

    PID = Wechselt von Systemstart zu Systemstart
    Name = Kann umbenannt werden
    Handle = Wird glaube ich nur bei einem existenten Fenster aufgerufen, wäre auch ok, wie komme ich denn mit AutoIt an das Handle ?

    Zitat

    Programmieren ist so lange lustig bis ein Fehler auftritt!


    ~ Dankeschön

  • Wenn ein Prozess Fenster erzeugt so sollten diese ja immer gleiche Eigenschaften aufweisen (z.B. Fenstertitel, Textpassagen etc.).
    Ein Handle wird dir nichts nützen.
    Es wird immer neu vergeben und ist nichts weiter als eine interne Nummer zur Ansprache eines bestimmten Fensters.

    Noch eine Möglichkeit wäre über den Dateipfad des ausgeführten Programmes Informationen über die exe auszuwerten.
    Also Beispielsweise könnte man eine md5-Checksumme von der Datei erzeugen und diese dann vergleichen.

    • Offizieller Beitrag

    Ein laufender Prozess hat ein eineindeutiges Handle und eine ebenso eineindeutige PID.
    Je nach Funktion wird die PID oder das Handle benötigt.
    Hier mal ein Bsp., wie du das Handle eines Prozesses erhalten kannst. (Die PID zu erhalten ist ja bekannt)

    Edit: Sehe grad, ich habe etwas daneben gelegen ;). Das Handle wird nur erstellt, wenn es angefordert wird und anschließend verworfen. Es ist also nicht geeignet zur Identifikation.

    [autoit]

    Const $PROCESS_QUERY_INFORMATION = 0x400

    [/autoit][autoit][/autoit][autoit]

    $PID = Run('calc.exe')
    $hProcess = OpenProcess($PROCESS_QUERY_INFORMATION, False, $PID)
    ConsoleWrite('$hProcess "calc.exe": ' & $hProcess & @CRLF)

    [/autoit][autoit][/autoit][autoit]

    Func OpenProcess($dwDesiredAccess, $bInheritHandle, $dwProcessId)
    Local $ret = DllCall("kernel32", 'long', 'OpenProcess', 'long', $dwDesiredAccess, _
    'long', $bInheritHandle, 'long', $dwProcessId)
    Return $ret[0]
    EndFunc

    [/autoit]
  • Zitat

    Also Beispielsweise könnte man eine md5-Checksumme von der Datei erzeugen und diese dann vergleichen.


    Und wie ?

    Zitat

    Programmieren ist so lange lustig bis ein Fehler auftritt!


    ~ Dankeschön

  • Prinzipiell möglich wäre folgende Vorgehensweise:

    • Aktuell laufende Prozess-IDs per ProcessList() abfragen.
    • Dateipfade jedes einzelnen Prozesses bestimmen (>>Thread<<)
    • md5 berechnen über diverse schon existierende Funktionen (>>Beispiel<<)
    • die berechneten md5-Werte mit der vorher von deiner Datei bestimmten md5-Checksumme vergleichen.

    Dein Rechner würde sich dann außerdem noch freuen wenn nicht dauernd in einer Endlosschleife immer wieder die md5-Checksummen der einzelnen Prozesse neu berechnet werden sondern dir zusätzlich noch etwas einfallen lässt das nur einmal die md5 für einen neuen Prozess berechnet wird.

    Oder du findest eine alternative Möglichkeit den Prozess zu identifizieren (die Möglichkeit mit Fenstertitel oder Text wär erstmal einfacher umzusetzen).