Prüfen ob Programm schon offen ist

  • Ich brauche ne gute Lösung, um zu überprüfen, ob mein Programm schon offen ist. Denn der Fenstername kann ja geändert werden und der Prozessname ist je nach Name der .exe anders. Also ist es mit ProcessExists und WinExists zu ungenau. Hab mir schon was überlegt mit nem Registry Eintrag. Aber wenn man das Tool via Prozess beenden schließt dann wird der Eintrag ja nicht mehr umgeschrieben. Weiß jemand wie ich das besser prüfen kann?

  • Ich überprüfe ob ein Programm schon läuft mit Hilfe von "AutoItWinSetTitle()".

    Hier das Skript:

    Spoiler anzeigen
    [autoit]


    ;===============================================================================
    ; Function Name: _checkIfProgAllreadyExist
    ; Description: Prüft ob das Programm bereits läuft indem der Titel des AutoIt-Fensters verglichen wird.
    ; Bei einer übereinstimmung gibt es eine MessageBox aus und schließt das Programm.
    ;
    ; Syntax: _checkIfProgAllreadyExist($s_Au3WinTitle, $s_Text)
    ;
    ; Parameter: $s_Au3WinTitle - Der Titel des AutoIt-Fensters
    ; $s_Text - Der Text der MessageBox
    ;
    ;
    ; Author(s): Markus Egert
    ; Patric Pendelin <[email='patricpendelin@gmx.de'][/email]>
    ;===============================================================================
    Func _checkIfProgAllreadyExist($s_Au3WinTitle, $s_Text = "")
    If WinExists($s_Au3WinTitle) Then
    If $s_Text Then
    MsgBox(262144 + 48, 'Error', $s_Text)
    EndIf
    Exit
    EndIf
    AutoItWinSetTitle($s_Au3WinTitle)
    EndFunc ;==>_checkIfProgAllreadyExist

    [/autoit]


    Der erste Schritt beim Aufruf des Skriptes ist immer diese Funktion.

    Beispiel:

    Spoiler anzeigen
    [autoit]


    Func OnAutoItStart()
    _checkIfProgAllreadyExist('Programmname - xghjz', 'An instance of the Program is allready running!')
    EndFunc ;==>OnAutoItStart

    [/autoit]


    Patric

  • Ah, mal wieder was gelernt und sich umsonst Gedanken gemacht.
    Hat doch Sinn sich ab und zu mal die Manual durchzulesen.

    Patric

  • Du musst dir nen eindeutigen Namen für dein Script ausdenken. Der wird dann getestet.
    Du kannst damit sogar festlegen, dass dein Script auch bei mehreren angemeldeten Beutzern nur einmal ausgeführt wird:
    _SingleTon("Global\" & $EindeutigeID,2)
    z.B. kann man eine UUID verwenden, die man etwa auf http://www.famkruithof.net/uuid/uuidgen erzeugen kann