prozess überwachen (spielefenster)

  • guten morgen,

    ich starte ein Programm Spiel.exe

    im titel des spiel Ist die spielnummer integriert.
    mit:

    Code
    $spiel_titel = WinGetTitle("[active]")
    $baseline = StringSplit($spiel_titel, " ") ; teile sting anhand des lerrzeichen
    ;$baseline[6] = anzahl spiele


    jetzt will ich erreichen, dass bei änderung des $spiel_titel (nächstes spiel)
    die MsgBox(0 +262144, $baseline[6], "spiele");gibt anzahl spiele aus ___gestartet wird

    ich habe da mit While ProcessExists("Spiel.exe")............WEnd gebastelt, aber ich bin zu keinem ergebniss gekommen

    irgendwie muss das ding auf titeländerung reagieren

    kann mir da jemand bitte weiterhelfen, danke

    FROHE WEIHNACHTEN

    grusas roland

  • Ungetestet:

    Spoiler anzeigen
    [autoit]

    Global $hHandle = WinGetHandle("[ACTIVE]") ; Windows-Handle damit wirklich immer das selbe Fenster gemeint ist.
    Global $sTitle = WinGetTitle($hHandle)

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

    If ProcessExists("Spiel.exe") <> WinGetProcess($hHandle) Then ; Prüft ob Fenster wirklich das richtige ist
    MsgBox(0,"Fehler", 'Derzeit aktives Fenster gehört nicht zum Prozess "Spiel.exe"!')
    Exit
    EndIf

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

    While ProcessExists("Spiel.exe")
    If WinGetTitle($hHandle) <> $sTitle Then ; Vergleicht den aktuellen Fenstertitel und den gespeicherten
    MsgBox(0,"","Fenstertitel hat sich geändert")
    $sTitle = WinGetTitle($hHandle)
    EndIf
    Sleep(500)
    WEnd

    [/autoit]

  • das lässt sich doch mit WinActivate("CLASS:Spielklassenname") nach vorne holen. da es bei dir nicht im loop läuft hast du somit keinen zombie gebaut.
    auch könnte man es mit einem hotkey auslösen, dass es nach vorn geholt und dann ausgelesen wird. dann hast du nur den loop zum lebendig halten des scripts.

    I spent 10 minutes reviewing code and thinking "What kind of drugs is this guy on?" before realizing it was something I wrote.

    Einmal editiert, zuletzt von Maximus1 (25. Dezember 2010 um 11:24)

  • Den Text darunter habe ich wieder entfernt da ich noch die zusätzliche Abfrage mit dem Processnamen mit eingebaut habe.

    das lässt sich doch mit WinWaitActive("CLASSpielklassenname") nach vorne holen

    Von einer Klasse können mehrere Fenster existieren - wie weißt du da ob du das richtige hast?
    Verschiedene Prozesse können gleichzeitig mehrere Fenster einer Klasse erzeugen.
    Der Klassenname ist also zur eindeutigen Identifizierung ungeeignet.
    Man muss da schon über den zugehörigen Prozess des Fensters gehen.

    da es bei dir nicht im loop läuft

    Nein?
    Die While-Schleife auch gesehen?