Skripte

Inhaltsverzeichnis

Einführung

Ein Skript ist eine reine Textdatei mit mehreren Zeilen, die vom Programm (AutoHotkey.exe) ausgeführt werden. Ein Skript kann auch Hotkeys und Hotstrings enthalten, oder sogar nur aus diesen bestehen. Allerdings wird ein Skript ohne Hotkeys und Hotstrings seine Befehle von oben nach unten nacheinander ausführen, sobald es gestartet wird.

Das Programm lädt das Skript zeilenweise in den Speicher. Jede Zeile kann bis zu 16.383 Zeichen lang sein. Während des Ladevorgangs wird das Skript optimiert und überprüft, ob es gültig ist. Syntaxfehler werden angezeigt, und müssen behoben werden, bevor das Skript ausgeführt werden kann.

Der obere Bereich des Skripts (automatischer Ausführungsbereich)

Nachdem das Skript geladen wurde, beginnt dessen Ausführung bei der ersten Zeile und wird fortgesetzt, bis ein Return, Exit, Hotkey-/Hotstring-Label oder das physische Ende erreicht wird (je nachdem was zuerst kommt). Dieser obere Bereich des Skripts wird auch als automatischer Ausführungsbereich bezeichnet.

Ein Skript, das weder persistent noch Hotkeys, Hotstrings, OnMessage und GUI enthält, wird beendet, sobald der automatische Ausführungsbereich durchgeführt wurde. Ansonsten läuft es im Leerlauf und reagiert auf Ereignisse wie Hotkeys, Hotstrings, GUI-Ereignisse, benutzerdefinierte Menüpunkte und Timer.

Jeder Thread, der durch Hotkeys, Hotstrings, Menüpunkte, GUI-Ereignisse oder Timer gestartet wird, beginnt mit Standardwerten von den folgenden Attributen, die im automatischen Ausführungsbereich bestimmt wurden. Bei unbestimmten Attributen gelten die Standardeinstellungen (wie jeweils in den folgenden Seiten dokumentiert): DetectHiddenWindows, DetectHiddenText, SetTitleMatchMode, SetBatchLines, SendMode, SetKeyDelay, SetMouseDelay, SetWinDelay, SetControlDelay, SetDefaultMouseSpeed, CoordMode, SetStoreCapslockMode, AutoTrim, SetFormat, StringCaseSense, Thread, und Critical.

Falls das Ausführen des automatischen Ausführungsbereichs zu lange dauert (oder nie das Ende erreicht), werden die Standardwerte der oben genannten Einstellungen nach 100 Millisekunden automatisch wirksam. Wenn das Ende des automatischen Ausführungsbereichs schließlich erreicht ist (wenn überhaupt), werden die Standardwerte nochmals auf die aktuellen Werte aktualisiert. Daher ist es besser, die Standardeinstellungen im oberen Bereich des Skripts zu ändern, das Hotkeys, Hotstrings, Timer oder benutzerdefinierte Menüpunkte enthält. Beachte außerdem, dass jeder Thread seine eigene Sammlung von den oben genannten Einstellungen aufbewahrt. Änderungen an diesen Einstellungen beeinflussen keine anderen Threads.

Escapesequenzen

Das Standard-Escapezeichen von AutoHotkey ist ein Akzent / umgekehrtes Häkchen (`), das sich auf der deutschen Tastatur direkt links neben der Rücktaste befindet. Das Benutzen dieses Zeichens statt eines umgekehrten Schrägstrichs verhindert, dass zwei umgekehrte Schrägstriche in Dateipfaden angegeben werden müssen.

Da Kommas und Prozentzeichen eine besondere Bedeutung in der AutoHotkey-Sprache haben, sollte man `, oder `% angeben, um diese literal verwenden zu können. Bei einem MsgBox-Befehl müssen Kommas nicht mit einem Escapezeichen versehen werden. Eine weitere Ausnahme sind Kommas innerhalb des letzten Parameters eines Befehls: diese müssen nicht mit einem Escapezeichen versehen werden. Auf der #EscapeChar-Seite findet man eine komplette Liste von Escapesequenzen.

Einige Sonderzeichen können nur in Form einer Escapesequenz erzeugt werden. Häufig verwendet werden `t (Tabulator), `n (LF-Zeilenumbruchszeichen) und `r (CR-Zeilenumbruchszeichen).

Tipp: Bei jedem Befehl kann man das erste Komma weglassen (außer wenn der erste Parameter leer ist oder mit := oder = beginnt, oder wenn der Befehl am Anfang eines Fortsetzungsbereichs einzeln vorkommt). Zum Beispiel:

MsgBox Das ist ok.
MsgBox, Das ist auch ok (es hat ein direktes Komma).

Kommentare in einem Skript

Skripte können kommentiert werden, indem man am Anfang einer Zeile ein Semikolon verwendet. Zum Beispiel:

; Diese ganze Zeile ist ein Kommentar.

Kommentare können auch ans Ende eines Befehls gesetzt werden - in diesem Fall muss auf der linken Seite des Semikolons mindestens ein Leer- oder Tabulatorzeichen vorkommen. Zum Beispiel:

Run Notepad  ; Dieser Kommentar befindet sich neben dem Befehl.

Darüber hinaus können die Symbole /* und */ verwendet werden, um einen ganzen Bereich auszukommentieren, aber nur, wenn sich die Symbole am Zeilenanfang befinden. Zum Beispiel:

/*
MsgBox, Diese Zeile wurde auskommentiert (deaktiviert).
MsgBox, Diese auch. 
*/

Da Kommentare beim Starten eines Skripts ignoriert werden, haben sie keinen Einfluss auf die Performance oder Speicherauslastung.

Das voreingestellte Kommentarzeichen (Semikolon) kann per #CommentFlag in ein anderes Zeichen oder Zeichenkette geändert werden.

Eine lange Zeile in mehreren kurzen Zeilen aufteilen

Lange Zeilen können in mehreren kurzen Zeilen aufgeteilt werden, um sie besser lesbar und verwaltbar zu machen. Die Ausführungsgeschwindigkeit des Skripts wird dabei nicht reduziert, weil solche Zeilen im Speicher zusammengeführt werden, bevor das Skript startet.

Methode #1: Eine Zeile, die mit "and", "or", ||, &&, einem Komma oder einem Punkt beginnt, wird automatisch mit der oberen Zeile zusammengeführt (seit v1.0.46 gilt das auch für Ausdrucksoperatoren, außer ++ und --). Im folgenden Beispiel wird die zweite Zeile an der ersten angefügt, weil sie mit einem Komma beginnt:

FileAppend, Das ist der Text, der angefügt wird.`n   ; Kommentar hier möglich.
    , %A_ProgramFiles%\BeliebigeAnwendung\Log-Datei.txt  ; Kommentar.

Die folgenden Zeilen würden auch zu einer einzelnen Zeile zusammengeführt werden, weil die letzten beiden mit "and" oder "or" beginnen:

if (Farbe = "Rot" or Farbe = "Grün" or Farbe = "Blau"   ; Kommentar.
    or Farbe = "Schwarz" or Farbe = "Grau" or Farbe = "Weiß")   ; Kommentar.
    and ProduktIstInFarbeVerfügbar(Produkt, Farbe)   ; Kommentar.

Der ternäre Operator ist dafür auch gut geeignet:

ProduktIstVerfügbar := (Farbe = "Rot")
    ? false  ; Rote Produkte nicht verfügbar, daher ist der Funktionsaufruf irrelevant.
    : ProduktIstInFarbeVerfügbar(Produkt, Farbe)

Die Einrückungen in den oberen Beispielen sind optional. Sie machen deutlich, welche Zeilen zusammengehören. Außerdem ist es unnötig, zusätzliche Leerzeichen bei Zeilen einzufügen, die mit den Wörtern "AND" und "OR" beginnen; das Programm macht das automatisch. In den oberen Beispielen könnte man zwischen oder nach den Zeilen auch leere Zeilen oder Kommentare einfügen.

Methode #2: Diese Methode sollte verwendet werden, um eine große Anzahl an Zeilen zusammenzuführen oder wenn die Zeilen nicht für Methode #1 geeignet sind. Obwohl diese Methode besonders für automatisch-ersetzende Hotstrings nützlich ist, kann sie auch bei jedem Befehl oder Ausdruck verwendet werden. Zum Beispiel:

; BEISPIEL #1:
Var =
(
Zeile 1 vom Text.
Zeile 2 vom Text. Standardmäßig befindet sich ein Zeilenumbruchszeichen (`n) zwischen den Zeilen.
)

; BEISPIEL #2:
FileAppend,  ; Das Komma ist in diesem Fall erforderlich.
(
Eine Textzeile.
Standardmäßig wird das CR-Zeichen (Enter) zwischen der vorherigen und dieser Zeile als LF-Zeichen (`n) in die Datei geschrieben.
    Standardmäßig wird der Tabulator auf der linken Seite dieser Zeile auch in die Datei geschrieben (das gleiche gilt auch für Leerzeichen).
Standardmäßig werden Variablenverweise wie %Var% in den Variableninhalt aufgelöst.
), C:\Meine Datei.txt

In den oberen Beispielen sind mehrere Zeilen mit Klammern am Anfang und Ende eingegrenzt. Das nennt man Fortsetzungsbereich. Beachte, dass die Zeile nach der schließenden Klammer den letzten Parameter von FileAppend enthält. Diese Anwendungsart ist optional; das wird in solchen Fällen getan, um das Komma nicht als literales Komma, sondern als Parametertrennung zu behandeln.

Das Standardverhalten eines Fortsetzungsbereichs kann überschrieben werden, indem man eine oder mehrere der folgenden Optionen auf der rechten Seite der öffnenden Klammer einfügt. Sind mehrere Optionen notwendig, trenne sie jeweils mit einem Leerzeichen. Zum Beispiel: ( LTrim Join| %.

Join: Gibt an, wie die Zeilen verbunden werden sollen. Ist diese Option nicht vorhanden, erfolgt nach jeder Zeile, außer der letzten, ein Zeilenumbruchszeichen (`n). Ist das Wort Join alleine angegeben, werden die Zeilen direkt verbunden, ohne das Zeichen dazwischen vorkommen. Ansonsten können unmittelbar nach dem Wort Join bis zu 15 Zeichen erfolgen. Zum Beispiel würde Join`s nach jeder Zeile, außer der letzten, ein Leerzeichen einfügen ("`s" kennzeichnet ein literales Leerzeichen - eine spezielle Escapesequenz, die nur von Join erkannt werden kann). Ein weiteres Beispiel ist Join`r`n, das das Zeilenumbruchspaar CR+LF zwischen den Zeilen einfügt. Ebenso würde Join| einen senkrechten Strich zwischen den Zeilen eingefügen. Falls die letzte Zeile auch mit einer Join-Zeichenkette enden soll, muss man unmittelbar über der schließenden Klammer des Bereichs eine leere Zeile einfügen.

Bekannte Einschränkung: Wenn die Join-Zeichenkette mit einem Doppelpunkt endet, darf sie nicht die letzte Option auf dieser Zeile sein. Zum Beispiel: (Join: wird als Label "(Join" behandelt und (LTrim Join: wird nicht unterstützt, aber (Join: C ist in Ordnung.

LTrim: Entfernt Leer- und Tabulatorzeichen am Anfang jeder Zeile. Diese Option wird hauptsächlich verwendet, damit der Fortsetzungsbereich eingerückt werden kann. Außerdem kann diese Option für mehrere Fortsetzungsbereiche aktiviert werden, wenn #LTrim allein auf einer Zeile angegeben wird. #LTrim ist von der Position abhängig: es beeinflusst nur Fortsetzungsbereiche, die sich darunter befinden. Die Einstellung kann per #LTrim Off wieder deaktiviert werden.

RTrim0 (RTrim und eine 0): Deaktiviert das Entfernen von Leer- und Tabulatorzeichen am Ende jeder Zeile.

Comments (oder Comment oder Com oder C) [v1.0.45.03+]: Ermöglicht Semikolon-Kommentare innerhalb des Fortsetzungsbereichs (aber nicht /*..*/). Solche Kommentare (sowie alle links vorkommenden Leer- und Tabulatorzeichen) werden im Endergebnis entfernt, anstatt als literaler Text behandelt zu werden. Jeder Kommentar kann auf der rechten Seite einer Zeile oder auf einer neuen Zeile vorkommen.

% (Prozentzeichen): Behandelt Prozentzeichen nicht als Variablenverweise, sondern als literale Zeichen. Dadurch wird verhindert, dass jedes einzelne Prozentzeichen mit einem Escapezeichen versehen werden muss. Diese Option ist dort unnötig, wo Prozentzeichen bereits literal vorkommen können, wie bei automatisch-ersetzende Hotstrings.

, (Komma): Behandelt Kommas nicht als literale Kommas, sondern als Trennzeichen. Diese selten verwendete Option ist nur für Kommas notwendig, die zwischen den Befehlsparametern vorkommen, weil bei Funktionsaufrufen der Typ des Kommas egal ist. Zudem transformiert diese Option nur solche Kommas, die Parameter tatsächlich trennen. Das heißt, sobald der letzte Parameter des Befehls erreicht wird (oder keine Parameter vorhanden sind), werden nachfolgende Kommas als literale Kommas behandelt, unabhängig von dieser Option.

` (umgekehrtes Häkchen): Behandelt jedes umgekehrte Häkchen nicht als Escapezeichen, sondern als literales Zeichen. Dadurch wird auch verhindert, dass Kommas und Prozentzeichen explizit und einzeln mit einem Escapezeichen versehen werden können. Darüber hinaus unterdrückt diese Option die Umwandlung von explizit angegebenen Escapesequenzen wie `r und `t.

) [v1.1.01+]: Erscheint eine schließende Klammer in den Optionen des Fortsetzungsbereichs (außer als Parameter der Join-Option), wird die Zeile als Ausdruck neu interpretiert, anstatt als Beginn eines Fortsetzungsbereichs. Auf diese Weise können Ausdrücke wie (x.y)[z]() funktionieren, ohne dabei die öffnende Klammer mit einem Escapezeichen versehen zu müssen.

Bemerkungen

Escapesequenzen wie `n (Zeilenumbruch) und `t (Tabulator) werden innerhalb des Fortsetzungsbereichs unterstützt, solange die Akzent-Option (`) nicht vorhanden ist.

Fehlt die Comment-Option, werden Semikolon- und /*..*/-Kommentare innerhalb eines Fortsetzungsbereichs nicht unterstützt, weil sie als literaler Text angesehen werden. Allerdings können Kommentare in den unteren und oberen Zeilen des Bereichs eingefügt werden. Zum Beispiel:

FileAppend,   ; Kommentar.
; Kommentar.
( LTrim Join    ; Kommentar.
     ; Das ist kein Kommentar; es ist literal. Fügt das Wort Comments in der Zeile darüber ein, damit es ein Kommentar wird.
), C:\Datei.txt   ; Kommentar.

Daraus folgt, dass Semikolons innerhalb eines Fortsetzungsbereichs nie mit einem Escapezeichen versehen werden müssen.

Ein Fortsetzungsbereich kann keine Zeile erzeugen, deren Länge 16.383 Zeichen überschreitet (Bei dem Versuch warnt dich das Programm, bevor es startet). Man kann das umgehen, wenn mehrere Verkettungen bei einer Variable durchgeführt werden. Zum Beispiel:

Var =
(
...
)
Var = %Var%`n  ; Fügt mithilfe eines weiteren Fortsetzungsbereichs mehr Text hinzu.
(
...
)
FileAppend, %Var%, C:\Meine Datei.txt

Soll eine Zeile mit einer literalen schließenden Klammer beginnen, obwohl sie normalerweise das Ende eines Fortsetzungsbereichs kennzeichnet, muss man ein Akzent / umgekehrtes Häkchen davor setzen: `).

Nach einem Fortsetzungsbereich kann eine Zeile folgen, die die öffnende Klammer eines weiteren Fortsetzungsbereichs enthält. Auf diese Weise können die oben genannten Optionen beim Erstellen einer einzelnen Zeile variieren.

Die stückweise Konstruktion eines Fortsetzungsbereichs per #Include wird nicht unterstützt.

Ein Skript in eine EXE-Datei umwandeln (ahk2exe)

Ein Skript-Compiler wurde dem Programm beigefügt (zur Verfügung gestellt von fincs).

Ein Skript, das kompiliert wurde, wird zu einer eigenständigen ausführbaren Datei; das heißt, dass das Skript ohne AutoHotkey.exe gestartet werden kann. Der Kompilierungsvorgang erstellt eine ausführbare Datei, die folgendes enthält: den AutoHotkey-Interpreter, das Skript, Dateien per #Include und Dateien per FileInstall.

Ahk2Exe kann wie folgt verwendet werden:

  1. GUI-Schnittstelle: Führe die Verknüpfung "Convert .ahk to .exe" im Startmenü aus.
  2. Rechtsklick: Klicke mit der rechten Maustaste auf eine .ahk-Datei und wähle "Compile Script" aus (nur verfügbar, wenn die Option "Script Compiler" bei der Installation von AutoHotkey ausgewählt worden ist). Das erstellt eine EXE-Datei mit dem gleichen Basisnamen wie das Skript, die nach kurzer Zeit im selben Verzeichnis erscheint. Hinweis: Die erstellte EXE-Datei verwendet das gleiche Symbol, die gleiche .bin-Datei und die MPRESS-Einstellung, die zuletzt von Methode #1 verwendet worden sind.
  3. Befehlszeile: Der Compiler kann mit folgenden Parametern von der Befehlszeile ausgeführt werden:
    Ahk2Exe.exe /in Skript.ahk [/out Skript.exe] [/icon Symbol.ico] [/bin AutoHotkeySC.bin] [/mpress 0oder1]
    Zum Beispiel:
    Ahk2exe.exe /in "Skript.ahk" /icon "Symbol.ico"
    Verwendung:

Hinweise:

Der Quellcode sowie neuere Versionen des Compilers findet man auf GitHub.

Komprimieren von kompilierten Skripten

Ahk2Exe kann MPRESS (ein Freeware-Programm von MATCODE Software) verwenden, um kompilierte Skripte zu komprimieren. MPRESS wird automatisch benutzt, wenn die Datei mpress.exe im Compiler-Unterordner von AutoHotkey vorhanden ist. Dieses Verhalten kann man via /mpress 0 oder GUI-Einstellung deaktivieren.

Offizielle Website (war im März 2016 offline): http://www.matcode.com/mpress.htm

Mirror (Downloads und Information): https://autohotkey.com/mpress/

Hinweis: Eine auf diese Weise komprimierte EXE-Datei unterbindet eine einfache Einsicht in den Quellcode des Skripts mithilfe eines Texteditors wie z. B. Notepad oder PE-Resource-Editor. Allerdings kann es nicht verhindern, dass der Quellcode mit Tools extrahiert werden kann, die speziell dafür entwickelt worden sind.

Befehlszeilenparameter an einem Skript übergeben

Skripte unterstützen Befehlszeilenparameter. Das Format ist:

AutoHotkey.exe [Optionen] [Skript-Dateiname] [Skript-Parameter]

Bei kompilierten Skripten ist das Format:

KompiliertesSkript.exe [Optionen] [Skript-Parameter]

Optionen kann die folgenden Begriffe enthalten (oder leer bleiben):

OptionBedeutung
/f oder /force Skript bedingungslos starten und Warnmeldungen überspringen. Diese Option hat den gleichen Effekt wie #SingleInstance Off.
/r oder /restart Gibt an, dass das Skript neu gestartet werden soll (das auch intern vom Reload-Befehl verwendet wird).
/ErrorStdOut Sendet alle Syntaxfehler, die den Start eines Skripts verhindern, zur Standardfehlerausgabe (stderr), anstatt ein Dialogfenster anzuzeigen. Siehe #ErrorStdOut für weitere Details. Dies kann mit /iLib kombiniert werden, um das Skript auf seine Gültigkeit zu überprüfen, ohne es starten zu müssen.
Nicht von kompilierten Skripten unterstützt:
/Debug [AHK_L 11+]: Verbindet sich mit einem Debugger-Client. Für weitere Details, siehe Interaktives Debuggen.
/CPn [AHK_L 51+]: Überschreibt den Standard-Zeichensatz, der zum Lesen der Skript-Dateien verwendet wird. Weitere Details findet man in "Zeichensatz einer Skript-Datei".
/iLib "AusgabeDatei"

[v1.0.47+]: AutoHotkey lädt das Sript, aber startet es nicht. Für jedes Skript, das mithilfe des Library-Mechanismus eingefügt wurde, werden zwei Zeilen in die Datei "AusgabeDatei" geschrieben. Diese Zeilen werden im folgenden Format geschrieben - dabei ist LibVerz der vollständige Pfad des Library-Ordners und LibDatei der Dateiname der Library:

#Include LibVerz\
#IncludeAgain LibVerz\LibDatei.ahk

Wenn die Ausgabedatei bereits existiert, wird sie überschrieben. AusgabeDatei kann * sein, um die Ausgabe in die Standardausgabe (stdout) zu schreiben.

Enthält das Skript Syntaxfehler, kann die Ausgabedatei leer sein. Der Exitcode des Prozesses kann verwendet werden, um diesen Zustand zu erkennen; bei einem Syntaxfehler ist der Exitcode eine 2. Mit der /ErrorStdOut-Option kann die Fehlermeldung unterdrückt oder abgefangen werden.

Skript-Dateiname: Dieser Parameter kann weggelassen werden, falls keine Skript-Parameter vorhanden sind. Fehlt dieser Parameter (z. B. wenn man AutoHotkey direkt über das Startmenü startet), wird das Programm nach einer Skriptdatei namens AutoHotkey.ahk suchen, und zwar in den folgenden Standorten von oben nach unten:

Der Dateiname AutoHotkey.ahk ist abhängig vom Namen der ausführbaren Datei, die zum Starten des Skripts verwendet wurde. Wenn du beispielsweise AutoHotkey.exe in MeinSkript.exe umbenennst, versucht das Programm MeinSkript.ahk zu finden. Startest du AutoHotkeyU32.exe ohne Parameter, sucht das Programm nach AutoHotkeyU32.ahk.

Hinweis: In den Versionen vor Revision 51 suchte das Programm nach AutoHotkey.ini im Arbeitsverzeichnis, oder nach AutoHotkey.ahk in "Eigene Dokumente".

[v1.1.17+]: Verwende ein Sternchen (*) als Dateiname, um den Skript-Text aus der Standardeingabe (stdin) zu lesen. Siehe als Beispiel ExecScript().

Skript-Parameter: Eine oder mehrere Zeichenketten, getrennt durch Leerzeichen, die an das Skript übergeben werden sollen. Jeder Parameter, der Leerzeichen enthält, sollte in Anführungszeichen gesetzt werden. Soll ein Anführungszeichen übergeben werden, muss ein literaler umgekehrter Schrägstrich davor gesetzt werden (\"). Daraus folgt, dass jeder nachfolgende Schrägstrich in einem zitierten Parameter (wie "C:\Meine Dokumente\") als literales Anführungszeichen behandelt wird (das heißt, dass das Skript die Zeichenkette C:\Meine Dokumente" erhalten wird). Um solche Anführungszeichen zu entfernen, verwende StringReplace, 1, 1, ",, All.

Das Skript sieht eingehende Parameter als Variablen %1%, %2% und so weiter. Darüber hinaus enthält %0% die Anzahl an Parametern, die übergeben worden sind (0, wenn keine). Allerdings können diese Variablen nicht direkt in einem Ausdruck verwiesen werden, weil sie sonst als Zahlen anstatt als Variablen interpretiert werden. Das folgende Beispiel beendet das Skript, falls zu wenig Parameter übergeben wurden:

if 0 < 3  ; Die linke Seite einer if-Anweisung ohne Ausdruck ist immer der Name einer Variable.
{
    MsgBox Das Skript benötigt mindestens 3 eingehende Parameter, jedoch kamen nur %0% an.
    ExitApp
}

Variiert die Anzahl an übergebenen Parametern (wenn der Benutzer zum Beispiel mit der Maus mehrere Dateien auf ein Skript zieht und ablegt), kann das folgende Beispiel verwendet werden, um sie einzeln zu extrahieren:

Loop, %0%  ; Für jeden Parameter:
{
    param := %A_Index%  ; Ruft den Inhalt der Variable ab, deren Name in A_Index enthalten ist.
    MsgBox, 4,, Parameternummer %A_Index% ist %param%.  Weiter?
    IfMsgBox, No
        break
}

Sind die Parameter Dateinamen, kann das folgende Beispiel verwendet werden, um sie in ihre zeichengenaue lange Namen umzuwandeln (wie im Dateisystem gespeichert), einschließlich des vollständigen/absoluten Pfads:

Loop %0%  ; Für jeden Parameter (oder abgelegte Datei auf ein Skript):
{
    Pfadangabe := %A_Index%  ; Ruft den Inhalt der Variable ab, deren Name in A_Index enthalten ist.
    Loop %Pfadangabe%, 1
        LangerPfad = %A_LoopFileLongPath%
    MsgBox Der zeichengenaue lange Pfadname der Datei `n%Pfadangabe%`n ist:`n%LangerPfad%
}

Bekannte Einschränkung: das Ziehen und Ablegen von Dateien auf eine .ahk-Datei kann fehlschlagen, wenn 8.3-Namen (Kurznamen) in einem NTFS-Dateisystem deaktiviert worden sind. Eine Möglichkeit zur Umgehung des Problems ist es, das Skript zu kompilieren und die Dateien dann auf die resultierende EXE-Datei abzulegen.

Zeichensatz einer Skript-Datei [AHK_L 51+]

Die Zeichen, die eine Skript-Datei enthalten kann, werden vom Zeichensatz (Codepage) eingeschränkt, der zum Laden der Datei verwendet wird.

Beachte, dass sich das nur auf Skript-Dateien bezieht, die von AutoHotkey geladen werden, nicht auf die Dateibearbeitung im Skript selbst. FileEncoding kontrolliert die Standardcodierung von Dateien, die vom Skript gelesen oder geschrieben werden. IniRead und IniWrite verwenden immer UTF-16 oder ANSI.

Bei der Umwandlung des gesamten Textes in das ursprüngliche Zeichenkettenformat (falls erforderlich) werden Zeichen, die ungültig sind oder im ursprünglichen Zeichensatz nicht vorkommen, mit einem Fragezeichen ersetzt. In Unicode-Builds passiert das nur, wenn Codierungsfehler in der Skript-Datei auftreten oder der Zeichensatz, der zum Speichern oder Laden der Datei verwendet wird, nicht passt.

RegWrite kann verwendet werden, um die Standardeinstellung für Skripte festzulegen, die vom Explorer aus gestartet werden (z. B. per Doppelklick einer Datei):

; Hebe die Kommentierung der entsprechenden Zeile auf oder lasse sie alle kommentiert,
;   um den Standard des aktuellen Builds wiederherzustellen.  Je nach Bedarf anpassen:
; Zeichensatz = 0        ; Standard-ANSI-Zeichensatz des Systems
; Zeichensatz = 65001    ; UTF-8
; Zeichensatz = 1200     ; UTF-16
; Zeichensatz = 1252     ; ANSI-Latin-1; Westeuropäisch (Windows)
if (Zeichensatz != "")
    Zeichensatz := " /CP" . Zeichensatz
Befehl="%A_AhkPath%"%Zeichensatz% "`%1" `%*
Key=AutoHotkeyScript\Shell\Open\Command
if A_IsAdmin    ; Für alle Benutzer setzen.
    RegWrite, REG_SZ, HKCR, %Key%,, %Befehl%
else            ; Nur für den aktuellen Benutzer setzen.
    RegWrite, REG_SZ, HKCU, Software\Classes\%Key%,, %Befehl%

Das setzt natürlich voraus, dass AutoHotkey bereits installiert worden ist. Ansonsten wäre das Ergebnis alles andere als zufriedenstellend.

Ein Skript debuggen

Befehle wie ListVars und Pause können dir dabei helfen, das Skript zu debuggen (von Fehlern zu bereinigen). Zum Beispiel erstellen die folgenden zwei Zeilen "Haltepunkte" bei sorgfältig ausgewählten Positionen im Skript:

ListVars
Pause

Erreicht das Skript diese zwei Zeilen, wird es die aktuellen Inhalte von allen Variablen anzeigen, die dann überprüft werden können. Ist man damit fertig, kann das Skript fortgesetzt werden, indem die Pause per Datei- oder Infobereichsmenü aufgehoben wird. Das Skript wird fortgesetzt, bis es den nächsten "Haltepunkt" erreicht (sofern vorhanden).

Am besten sollten diese "Haltepunkte" bei Positionen eingefügt werden, bei denen das aktive Fenster egal für das Skript ist, wie z. B. unmittelbar vor einem WinActivate-Befehl. Auf diese Weise kann das Skript wieder ordnungsgemäß fortgesetzt werden, sobald die Pause aufgehoben wird.

Die folgenden Befehle sind auch fürs Debuggen geeignet: ListLines, KeyHistory und OutputDebug.

Häufig auftretende Fehler wie Tippfehler und fehlende Deklarationen von globalen Variablen können erkannt werden, indem Warnungen aktiviert werden.

Interaktives Debuggen [AHK_L 11+]

Interaktives Debuggen ist mit einem unterstützten DBGp-Client möglich. Üblicherweise sind die folgenden Aktionen möglich:

Beachte, dass diese Funktionalität bei kompilierten Skripten deaktiviert ist.

Um interaktives Debuggen zu aktivieren, starte zuerst einen unterstützten Debugger-Client und führe danach das Skript mit der /Debug-Befehlszeilenoption aus.

AutoHotkey.exe /Debug[=SERVER:PORT] ...

SERVER und PORT können weggelassen werden. Zum Beispiel bewirken beide Zeilen dasselbe:

AutoHotkey /Debug "MeinSkript.ahk"
AutoHotkey /Debug=localhost:9000 "MeinSkript.ahk"

[AHK_L 59+]: Um den Debugger nachträglich mit einem Skript zu verbinden, sende ihm eine Nachricht wie folgt:

Skriptpfad = ; SETZE HIER DEN VOLLSTÄNDIGEN PFAD DES SKRIPTS EIN
DetectHiddenWindows On
IfWinExist %Skriptpfad% ahk_class AutoHotkey
    ; Optionale Parameter:
    ;   wParam  = IPv4-Adresse des Debugger-Clients als 32-Bit-Integer.
    ;   lParam  = Port, der vom Debugger-Client abgehört werden soll.
    PostMessage DllCall("RegisterWindowMessage", "Str", "AHK_ATTACH_DEBUGGER")

Ein verbundener Debugger-Client kann wieder getrennt werden, ohne das Skript selbst beenden zu müssen, indem der "detach"-Befehl von DBGp gesendet wird.

Portabilität von AutoHotkey.exe

Es wird nur die Datei AutoHotkey.exe benötigt, um ein beliebiges .ahk-Skript zu starten.

[AHK_L 51+]: Das Umbenennen von AutoHotkey.exe ändert auch die Tatsache, welches Skript standardmäßig ausgeführt wird. Diese Methode kann als Alternative zur Skript-Kompilierung verwendet werden, um das Skript bei einem Computer ausführen zu können, auf dem AutoHotkey nicht installiert ist. Zum Beispiel würde MeinSkript.exe automatisch MeinSkript.ahk ausführen, wenn ein Dateiname nicht angegeben ist. Trotzdem kann es weiterhin andere Skripte ausführen.

Installer-Optionen

Um AutoHotkey automatisch in das Standardverzeichnis zu installieren (das gleiche Verzeichnis, welches beim normalen Installationsmodus angezeigt wird), übergebe den Parameter /S an den Installer. Zum Beispiel:

AutoHotkey110800_Install.exe /S

Um anstelle des Standardverzeichnisses ein anderes Verzeichnis anzugeben, verwende den /D-Parameter (lässt man /S weg, würde /D das Standardverzeichnis ändern, welches vom Installer angezeigt wird). Zum Beispiel:

AutoHotkey110800_Install.exe /S /D=C:\Programme\AutoHotkey

Version: Falls AutoHotkey zuvor installiert wurde, erkennt der Installer automatisch, welche Version von AutoHotkey.exe als Standardeinstellung gesetzt werden soll. Ansonsten gilt als Standardeinstellung Unicode 32-Bit oder Unicode 64-Bit, abhängig davon, ob das Betriebssystem im 64-Bit-Format ist. Soll die Standardversion überschrieben werden, übergebe einen der folgenden Parameter:

Das folgende Beispiel installiert AutoHotkey automatisch und setzt ANSI 32-Bit als Standardversion:

AutoHotkey110800_Install.exe /S /A32

Deinstallieren: Um AutoHotkey automatisch zu deinstallieren, übergebe den Parameter /Uninstall an Installer.ahk. Zum Beispiel:

"C:\Programme\AutoHotkey\AutoHotkey.exe" "C:\Programme\AutoHotkey\Installer.ahk" /Uninstall

In Versionen älter als 1.1.08.00 muss uninst.exe /S verwendet werden. Zum Beispiel:

"C:\Programme\AutoHotkey\uninst.exe" /S

Hinweis: Installer.ahk muss mit Administratorrechten ausgeführt werden, um richtig funktionieren zu können.

Extrahieren: In den neueren Versionen des Installers befindet sich an der unteren rechten Ecke ein Link, mit dem man die Setup-Dateien ohne Installation extrahieren kann. Wenn diese Funktion vorhanden ist, kann sie mit der Befehlszeilenoption /E aufgerufen werden. Zum Beispiel:

AutoHotkey110903_Install.exe /D=F:\AutoHotkey /E

Skripte neustarten [v1.1.19.02+]: Im automatischen Install/Uninstall-Modus werden laufende Skripte automatisch geschlossen, wo immer es notwendig ist. Verwende die /R-Option , um diese Skripte automatisch neu zu laden, unter Verwendung der EXE, mit der sie gerade laufen, ohne Befehlszeilenparameter. Das Setup wird versuchen, die Skripte via Explorer zu starten, daher werden sie nicht mit Administratorrechten laufen, wenn UAC aktiv ist.

Taskleistenschaltflächen [v1.1.08+]: Standardmäßig werden in Windows 7 oder höher Taskleistenschaltflächen von mehreren Skripten automatisch zu einer Taskleistenschaltfläche zusammengefasst. Die Option Separate taskbar buttons (Separate Taskleistenschaltflächen) deaktiviert dieses Verhalten, indem sie jede ausführbare AutoHotkey-Datei als Host-App (IsHostApp) registriert.

[v1.1.24.02+]: Installationen via Befehlszeile können /IsHostApp oder /IsHostApp=1 benutzen, um die Option zu aktivieren, und /IsHostApp=0, um sie zu deaktivieren.

Mit UI-Access ausführen [v1.1.24.02+]

Das Installer-GUI hat die Option "Add 'Run with UI Access' to context menus" ('Mit UI-Access ausführen' in das Kontextmenü einfügen). Diese Kontextmenü-Option bietet einen Workaround für häufig auftretende UAC-bezogene Probleme, damit das Skript administrative Programme automatisieren kann - ohne dass das Skript mit Administratorrechten laufen muss. Um das zu erreichen, wird der Installer Folgendes tun:

Wenn irgendeine dieser UIA-Dateien vor der Installation vorhanden sein sollte, wird der Installer sie automatisch aktualisieren, selbst wenn die uiAccess-Option inaktiv ist.

Installationen via Befehlszeile können /uiAccess oder /uiAccess=1 benutzen, um die Option zu aktivieren, und /uiAccess=0, um sie zu deaktivieren. Standardmäßig wird der Installer die Option aktivieren, wenn UAC aktiv ist und wenn die UI-Access-Kontextmenü-Option vor der Installation vorhanden war.

Skripte, die andere Skripte mit UI-Access ausführen müssen, können einfach Run benutzen, um die entsprechende UIA.EXE-Datei mit den normalen Befehlszeilenparametern auszuführen.

Bekannte Einschränkungen::

Schau dir Enable interaction with administrative programs (Interaktion mit administrativen Programmen ermöglichen) im Archiv-Forum an, um mehr zu erfahren.

Skript-Beispiele

Auf dieser Seite kann man einige nützliche Skripte finden.