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

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Nussbeisser
Posts: 120
Joined: 17 Jul 2019, 08:49

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

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!
just me
Posts: 9512
Joined: 02 Oct 2013, 08:51
Location: Germany

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

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.
garry
Posts: 3780
Joined: 22 Dec 2013, 12:50

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

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   
*/

User avatar
Noitalommi_2
Posts: 265
Joined: 16 Aug 2023, 10:58

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

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.
Nussbeisser
Posts: 120
Joined: 17 Jul 2019, 08:49

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

03 May 2024, 11:26

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

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 22 guests