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
Fehlerbehandlung
-
- [ offen ]
-
cloth86 -
5. August 2008 um 09:31 -
Geschlossen -
Erledigt
-
-
- Offizieller Beitrag
Tretten Fehler im Programm auf egal welche Art von MesseageBoxen sollte dies Dokumentiert werden.
[autoit]
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:#include<File.au3>
[/autoit][autoit][/autoit][autoit]
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)ProgrammsWhile True
[/autoit][autoit][/autoit][autoit]
WinWaitActive($title)
_FileWriteLog($log, WinGetText($title))
WinWaitClose($title)
WEndFunc ende()
[/autoit]
Exit
EndFunc -
- Offizieller Beitrag
Hi,
andere Möglichkeit wäre z.B. in einer schleife zu prüfen, ob dein Programmfenster den Fokus hat und falls die FehlerGUI den Fokus klaut, weißt du Bescheid.
Mega
-
Das ist eine gute Idee, das werde ich einmal ausprobieren! Danke euch
-
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
[/autoit][autoit][/autoit][autoit]
#include <WinAPI.au3>
#include <GUIConstantsEx.au3>Opt('MustDeclareVars', 1)
[/autoit][autoit][/autoit][autoit]_Main()
[/autoit][autoit][/autoit][autoit]Func _Main()
[/autoit]
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 ;==>_MainMega
-
Dank dir, habe es hinbekommen