Fehlerbehandlung

  • Hallo liebe AutoITer,
    folgendes Problem, ich schreibe kleine Testzyklen für unsere Software. Tretten Fehler im Programm auf egal welche Art von MesseageBoxen sollte dies Dokumentiert werden. Nun ist die Frage wie man solch eine Unterbrechung wahrnehmen kann und beispielsweise einen Screenshot vom Desktop machen kann. Gibt es sowas wie Error Handles in die man springen kann wenn ein Script an einer bestimmten Stelle nach einer bestimtmen Zeit nicht weiter kommt? Über ein paar Tipps würde ich mich freuen Danke

    • Offizieller Beitrag

    Tretten Fehler im Programm auf egal welche Art von MesseageBoxen sollte dies Dokumentiert werden.


    Vermutlich sind die MsgBoxen stilgleich, also ein teilweise identischer Titel ist enthalten (z.B. "Achtung Fehler in ...."). Du kannst ein Programm im Hintergrund laufen lassen, dass bei Aufpoppen eines Fensters mit diesem Titelteil der Inhalt in eine Logdatei geschrieben wird.
    Damit auch Teile des Titels erkannt werden: Opt("WinTitleMatchMode", 2)
    Das Programm sollte in etwa dann so aussehen:

    [autoit]

    #include<File.au3>
    Opt("WinTitleMatchMode", 2) ; erkennt Teile des Fenstertitels
    Global $title = "Gemeinsamer Teil des Titels der MsgBoxen" ; darf nicht identisch im Hauptfenster enthalten sein!
    Global $log = "Pfad der Logdatei"
    HotKeySet("!e", "ende") ; Hotkey Alt+E zum Beenden des (Endlos)Programms

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

    While True
    WinWaitActive($title)
    _FileWriteLog($log, WinGetText($title))
    WinWaitClose($title)
    WEnd

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

    Func ende()
    Exit
    EndFunc

    [/autoit]
  • Xenobiologist kannst du mir mal ein Beispiel dafür geben nur grob ein ansatz? Wie stell ich fest / prüfe ich das mein Hauptfenster noch den Fokus hat?

    Ich würde das dann einfach so lösen, die erste Idee war auch nciht schlecht, nur haben wir eine Software die sehr Modular aufgebaut ist und jeder Entwickler seine MsgBox Title anders gestaltet, ist wohl recht nicht die beste Art aber leider vorhanden :)) Daher denk ich mal komm ich mit dem Abfragen des Fokus am besten.

    • Offizieller Beitrag

    Hi,

    so ungefähr:

    [autoit]

    #AutoIt3Wrapper_Au3Check_Parameters= -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <WinAPI.au3>
    #include <GUIConstantsEx.au3>

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

    Opt('MustDeclareVars', 1)

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

    _Main()

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

    Func _Main()
    Local $gui, $msg, $btnFocus, $win, $text, $i = 1
    $gui = GUICreate("__WinAPI_GetFocus Example", 200, 200)
    $btnFocus = GUICtrlCreateButton("Get Focus", 50, 85, 100, 30)
    GUISetState(@SW_SHOW)
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $btnFocus
    $win = _WinAPI_GetFocus()
    $text = "Full Title: " & WinGetTitle($win) & @LF
    $text &= "Full Text: " & WinGetText($win) & @LF
    $text &= "Handle: " & WinGetHandle($win) & @LF
    $text &= "Process: " & WinGetProcess($win) & @LF
    MsgBox(0, "", $text)
    EndSelect
    If Not WinActive($gui) Then
    ConsoleWrite($i & ': GUI LOST FOCUS!!!' & @CRLF)
    $i += 1
    If $i = 21 Then
    WinActivate($gui)
    $i = 1
    EndIf
    EndIf
    WEnd
    EndFunc ;==>_Main

    [/autoit]

    Mega