Behandlung von "Fehlern" bei der Skriptausführung in AHK V2

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Behandlung von "Fehlern" bei der Skriptausführung in AHK V2

Re: Behandlung von "Fehlern" bei der Skriptausführung in AHK V2

Post by Nussbeisser » 03 May 2024, 11:26

Vielen Dank!
Du bist wirklich eine wahre Perle in dieser Community! :)

Re: Behandlung von "Fehlern" bei der Skriptausführung in AHK V2

Post by Noitalommi_2 » 03 May 2024, 08:58

Hi.
just me wrote:
03 May 2024, 02:20
[...]
Bei beiden Lösungen ist zu beachten, dass eine Fehlerprüfung über ErrorLevel nicht mehr möglich ist.
Meinst du A_LastError? Weil ErrorLevel wurde in v2 entfernt.

Re: Behandlung von "Fehlern" bei der Skriptausführung in AHK V2

Post by garry » 03 May 2024, 04:24

ein Beispiel beim alten Basic > "ERROR in Line" > "ERROR"
10 on error goto 50
20 A=0:B=1/A
40 END
50 if err=11 and erl=20 then resume 40
-
-
Function in AHK ( try/catch )

Code: Select all

;- onerror goto
OnError("a1",1)
A:=0
B:=(1/0)           ;- hier kein ERROR
msgbox,B=%b%
%e1% := ccc         ; < ERROR hier
;try,%e1% := ccc    ; < keine Fehlermeldung
Gui,2:show,x0 y0 w250 h200 ,TEST
return
;------------
2Guiclose:
Exitapp
;------------
a1(e)
{
aa:= % "ERROR`nError at Line = "  e.line  "`nWith = " e.extra "`nMessage= " e.message  "`nError occured at > "  e.what  "`nFile= "  e.file  "`n"
msgbox,%aa%
exitapp
return true
}

/*
10 CLS
11 ON ERROR GOTO 50
20 A=0:B=1/A
45 END
50 'LABEL ERROR
54 PRINT "Error in Line=";ERL;"  ERROR=";ERR;"> DIVISION by ZERO":RESUME 45

Error in Line= 20   ERROR= 11 > DIVISION by ZERO   
*/

Re: Behandlung von "Fehlern" bei der Skriptausführung in AHK V2

Post by just me » 03 May 2024, 02:20

Moin,

v2 bringt die Funktion OnError(). Damit kann man eine zentrale Fehlerbehandlungsroutine bestimmen. Wenn diese Routine den Wert -1 zurückgibt, wird das Skript ohne Fehlermeldung fortgesetzt, wenn AHK meint, dass das möglich ist. Mit der 'schönen neuen kurzen' Schreibweise (Fat-Arrow-Funktionen) könnte das so aussehen:

Code: Select all

#Requires Autohotkey v2.0
OnError((*) => -1)
; ...
; ...
A := []
MsgBox(A[1])
Für eher konservative Mitmenschen sähe es so aus:

Code: Select all

#Requires Autohotkey v2.0
OnError(MachWeiterWennEsGeht)
; ...
; ...
A := []
MsgBox(A[1])
; ...
; ...
MachWeiterWennEsGeht(Fehler, Modus) {
   Return -1
}

Im Zweifel kann man auch jeder 'unsicheren' Anweisung das Schlüsselwort Try voranstellen. Ein ergänzendes Catch ist nicht zwingend.

Bei beiden Lösungen ist zu beachten, dass eine Fehlerprüfung über ErrorLevel nicht mehr möglich ist.

Behandlung von "Fehlern" bei der Skriptausführung in AHK V2

Post by Nussbeisser » 02 May 2024, 16:28

Guten Abend zusammen,
In der AHK-Version 1 wurde das Skript einfach fortgesetzt, wenn ein Fenster oder ein Steuerelement nicht gefunden werden konnte. Zum Beispiel:

ControlClick, Button1, ahk_class Notepad



Wenn ich dasselbe in AHK-Version 2 ausführe:

Code: Select all

#Requires Autohotkey v2.0
ControlClick "Button1", "ahk_class Notepad"

bekomme ich folgende Fehler:

Error: Target window not found.
Specifically: ahk_class Notepad
005: ControlClick("Button1", "ahk_class Notepad")

Gibt es in AHK v2 auch eine Möglichkeit, global festzulegen, dass solche "Fehler" ignoriert werden sollen, wenn sie auftreten? Oder muss ich jedes Mal mit einem "if"-Statement überprüfen oder den Code in einem "Try Catch"-Block platzieren?


vielen Dank im Voraus!

Top