mehr als im Titel getönt ist es auch nicht. Einfach im Skript den Schalter auf true bzw false setzen.
Und schon gibts sowas wie debugging für Bedürftige. War es irgendwie leid ToolTips und MsgBoxen ständig auskommentieren/entfernen zu müssen. Frohes gelingen
tMsg().ahk (einfach kopieren/download)
Code: Select all
;
;
; tMsg := false ; soll eine Msg zu testzwecken angezeigt werden: true/false bzw. 1/0
; ; tMsg ? (... ist 'tMsg' wahr, dann)
; tMsg ? tMsg("bez:msg","bez:msg") ; ... zeige statusmeldung an, z.B. <key>:<value> (default delimiter = ":")
; tMsg ? tMsg("abc", myVar) ; separate angaben eines strings und einer variablen (ausgabe aufeinanderfolgende zeile)
; tMsg ? tMsg("myVar:" myVar) ; angabe eines strings mit bezeichner und wert zzgl delimiter (ausgabe auf gleicher zeile)
; tMsg ? tMsg(myVar) ; hier wird lediglich ein wert übergeben
; tMsg ? tMsg() ; ohne parameter angabe. Schreibt zeitstempel in datei "<scriptName>.log", in jeweils neuer zeile.
;
;
tMsg(v1:="",v2:="",v3:="",v4:="",v5:="",v6:="") { ; anzahl an elementen/eingangsparametern variabel (hier sechs)
fn := Func("tMsg") ; functionObj zur function erstellen
if (v1 = "") { ; da function aufruf ohne angabe
log:= FileOpen(SubStr(A_ScriptName,1,-4) . ".log", "a `r`n") ; ... datei öffnen (ggfs. erstellen), inhalte (hier zeitstempel) werden angehängt
log.Write(A_Now "`n") ; ... datei beschreiben
Log.Close() ; ... datei schließen
Return ; back 2 sender
}
Loop % fn.MaxParams { ; da function aufruf mit angabe(n): abarbeiten der übergebenen werte (funcObj liefert anzahl der params=iterations)
if InStr(v%A_Index%,":") { ; enthält der übergebene wert den default delimiter
msg := StrSplit(v%A_Index%,":") ; ... wird bezeichner von wert separiert (ermöglicht anschließend beliebiges ausgabeformat)
str .= msg[1] ":`t" msg[2] "`n" ; und nach editierung (auf gleicher zeile) concatiniert
} Else { ; ... ansonsten
str .= v%A_Index% "`n" ; ... wird ohne bezeichner (auf jeweils neuer zeile) concatiniert.
}
}
MsgBox % str ; finale ausgabe übergebener werte (vars/strings) während testlauf.
Return
}
Code: Select all
#NoEnv
#SingleInstance, Force
#Include tMsg().ahk ; einbinden/inkludieren der testMessage function AKA tMsg()
tMsg := 1 ; schalter zum an-/abschalten (true/false bzw 1/0) aller nachfolgenden tMsg() aufrufe
var := 1234 ; eine variable mit wert
fObj := {"a":"1","b":"2","c":"3"} ; ein array object
tMsg ? tMsg("Hallo Welt") ; mal grüßen!
Loop 2 {
SoundBeep
tMsg ? tMsg("Beep [" A_Index "]") ; anzahl soundbeeps zur laufzeit anzeigen
}
tMsg ? tMsg("a :" fObj["a"],"b :" fObj["b"]) ; key values von a, b des fObj arrays anzeigen
tMsg ? tMsg(bla()) ; rückgabewert der bla() anzeigen
bla() {
Return "Moin Moin!"
}
tMsg ? tMsg("myTestVar:`t" var) ; variablennamen und wert anzeigen
Gui, Add, DDL, x10 y10 vDDL1 Choose1, A|B|C|D|E
Gui, Add, Button, xp+130 yp-1 gStart, Start
Gui, Show, x100 y100 w184 h40, myGui
Return
Start:
Gui, Submit, NoHide
tMsg ? tMsg("You've selected: " DDL1) ; gui-selection anzeigen
Return