Fenster erkennen

  • Hallo Leute


    Ich habe ein Problem bei der Fensterermittlung. In einer Anwendung wird ein Absturzfenster geöffnet auf das ich reagieren möchte.
    Ich versuche es mit Winexists. Das Fenster hat keinen Titel.
    Es funktioniert aber irgendwie nicht richtig er schliesst mir zwar das Fenster aber startet mir die Anwendung immer wieder
    obwohl es das Fenster ja nicht mehr gibt.
    Er soll ja dann wenn das Programm wieder gestartet ist auf das Absturzfenster reagieren
    Ich komme nicht weiter
    Hat vielleicht jemand eine Idee?

  • Hi,
    es hilft extrem, wenn man sog. Debug-Meldungen (schreibt in die Konsole oder ruft eine Messagebox auf) in seinem Code verteilt, damit man sieht, was eigentlich passiert!
    Cursor auf die zu überprüfende Variable/Befehl, und dann ALT+D für eine Consoleninfo oder CTRL+SHIFT+D für eine Messagebox.
    In Scite gibt es ein Menü "Extras" dort befinden sich weiter Debug/Trace Funktionen, auch um alle auf einen Schlag wieder loszuwerden!
    JEDER Befehl in AutoIt gibt eine Rückmeldung, auf die man reagieren bzw. die man auswerten kann!
    Man schreibt also bspw. nicht "If WinExists(blablub) then" sondern

    AutoIt
    $IstFensterda = WinExists(blablub)  ;1 wenn Fenster da, 0, wenn nicht
    	ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $IstFensterda = ' & $IstFensterda & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    	if $IstFensterda = 1 then  'wenn Fenster erscheint, Messagebox
    		MsgBox(262144, 'Debug line ~' & @ScriptLineNumber, 'Selection:' & @CRLF & '$IstFensterda' & @CRLF & @CRLF & 'Return:' & @CRLF & $IstFensterda) ;### Debug MSGBOX

    Das Consolewrite erscheint bei jeder Fensterabfrage in der Console, die Messagebox erscheint, sobald Winexists() ein entsprechendes Fenster gefunden hat. Das "kostet" dich beim Programmieren genau 2 Tastendrücke, erspart dir und uns aber auch Zeit um Beiträge wie diesen zu erstellen/zu bearbeiten....

    Übrigens stehen in der (auch deutschen) Hilfe nützliche Hinweise, dort solltest du unter "Bemerkungen" bei WinExists() mal nachschauen.


    Weiterhin würde ich dir empfehlen, hinter JEDEM Befehl einen kurzen Kommentar einzufügen, damit DU nachvollziehen kannst, was der Befehl dort macht. Das weißt du nämlich nicht!

    Dein Programm macht genau das, was du beschrieben hast! In einer Endlosschleife wird, wenn ein bestimmtes Fenster erscheint, ein Programm XX geschlossen und danach wieder geöffnet!

  • was auch bei Aufzeigen von Möglichkeiten hilft ist das benennen der zu steuernden Anwendung. IE hat z.B.: modale von JS erzeugte Fenster. In dieser Zeit ist die Skriptausführung blockiert. Abhilfe schafft nur ein 2. Watcherskript oder (eine regelmäßig aufgerufende Funktion die trotz Blockade ausgeführt wird z.B.:) AdlibRegister.