Häufig gestellte Fragen (FAQ)

In der von der Community zusammengestellten FAQ auf autohotkey.net findest du weitere Fragen, wenn du hier nicht fündig wirst.

Sprachsyntax

Allgemeine Problembehandlung

Allgemeine Aufgaben

Hotkeys, Hotstrings und Neubelegung

Sprachsyntax

Wann werden Anführungszeichen bei Befehlen und ihren Parametern benutzt?

Anführungszeichen (") haben nur innerhalb von Ausdrücken eine besondere Bedeutung. Überall woanders werden sie literal behandelt, als wären sie ganz normale Zeichen. Führt ein Skript ein Programm oder ein Dokument aus, benötigt das Betriebssystem allerdings Anführungszeichen bei Befehlszeilenparameter, die Leerzeichen enthalten. Zum Beispiel: Run, Notepad.exe "C:\Meine Dateien\Adressenliste.txt".

Wann genau werden Variablen mit Prozentzeichen umschlossen (%)?

Variablennamen werden immer mit Prozentzeichen umschlossen, außer in den unteren Fällen, die fett hervorgehoben sind:

1) Bei Parametern, die Eingabe- oder Ausgabevariablen sind: StringLen, AusgabeVar, EingabeVar
2) Auf der linken Seite einer Zuweisung: Var = 123abc
3) Auf der linken Seite einer traditionellen if-Anweisung (kein Ausdruck): If Var1 < %Var2%
4) Überall in Ausdrücken. Zum Beispiel:

If (Var1 <> Var2)
    Var1 := Var2 + 100

Wann sollten Prozentzeichen und Kommas mit einem Escapezeichen versehen werden?

Literale Prozentzeichen müssen mit einem Escapezeichen versehen werden, indem man ein Akzent / umgekehrtes Häkchen davorsetzt. Zum Beispiel: MsgBox Der aktuelle Prozentwert liegt bei 25`%. Literale Kommas müssen auch mit einem Escapezeichen versehen werden (`,), es sei denn, sie werden in einer MsgBox oder im letzten Parameter eines Befehls verwendet (in diesem Fall ist das umgekehrte Häkchen zulässig, aber nicht notwendig).

Sind Kommas oder Prozentzeichen innerhalb eines Ausdrucks in Anführungszeichen gesetzt, ist das umgekehrte Häkchen zulässig, aber nicht notwendig. Zum Beispiel: Var := "15%".

Allgemeine Problembehandlung

Was kann ich tun, wenn AutoHotkey nicht installiert wird?

7-Zip-Fehler: Verwende 7-Zip oder ein kompatibles Programm, um die Setup-Dateien aus der Installer-EXE zu extrahieren und starte dann setup.exe oder Installer.ahk (zieh Installer.ahk mit gedrückter Maustaste auf AutoHotkeyU32.exe und lass los).

Der AutoHotkey-Installer ist ein selbstextrahierendes 7-Zip-Archiv, das versuchen wird, die Dateien in das temporäre Benutzerverzeichnis zu entpacken und ein kompiliertes Skript zu starten. Manchmal kann es vorkommen, dass die Dateien aufgrund von Systemrichtlinien oder andere Faktoren nicht extrahiert oder ausgeführt werden dürfen. Dabei wird üblicherweise ein "7-Zip-Fehler" angezeigt. In so einem Fall könnte es helfen, die Dateien manuell in ein anderes Verzeichnis zu extrahieren.

Setup hängt: Erscheint das Setup-Fenster ohne Inhalt oder überhaupt nicht, kannst du eine oder beide folgende Methoden ausprobieren:

Sonstiges: Die obigen Vorschläge decken die häufigsten Probleme. Weitere Unterstützung findest du im Forum.

Warum werden einige Zeilen in meinem Skript nie ausgeführt?

Jede Zeile, die unmittelbar beim Starten des Skripts ausgeführt werden soll, muss ganz oben im Skript vorkommen und vor dem ersten Hotkey, Hotstring oder Return stehen. Siehe automatischer Ausführungsbereich für weitere Details.

Die erste auszuführende Zeile eines Hotkeys darf nicht neben der Definition stehen, sondern muss darunter erfolgen. Zum Beispiel:

#space::  ; WIN+LEERTASTE
Run Notepad
WinWaitActive Unbenannt - Editor
WinMaximize
return

Warum funktioniert mein Skript nicht in Windows xxx, obwohl es in einer vorherigen Version lief?

Dieses Problem tritt in mehreren Varianten auf:

Wenn du auf ein anderes Betriebssystem gewechselt hast, kann es sein, dass sich auch etwas geändert hat, das Einfluss auf dein Skript haben kann. Wenn du zum Beispiel einen neuen Computer hast, können andere Treiber oder Software installiert sein. Wenn du AutoHotkey auf eine neue Version aktualisiert hast, finde heraus, welche Version zuvor installiert war, und überprüfe dann die Changelog und Kompatibilitätshinweise auf Änderungen, die dein Skript stören könnten.

SoundGet, SoundSet, SoundGetWaveVolume und SoundSetWaveVolume verhalten sich in Windows Vista und höher anders als in früheren Versionen von Windows. Zum einen sind die Gerätenummern unterschiedlich angeordnet und zum anderen können Komponenten fehlen. Das Verhalten richtet sich nach den Audio-Treibern, die zwangsläufig anders sind als die von XP. Mit dem Soundkartenanalyse-Skript können die korrekten Gerätenummern ermitteln werden.

Siehe auch die folgende Frage:

Wie umgehe ich Probleme, die von der Benutzerkontensteuerung (UAC) erzeugt werden?

Die Benutzerkontensteuerung (UAC) verursacht häufig Probleme, besonders wenn man von Windows XP/Vista/7 zu Vista/7/8/10 wechselt. UAC gibt es seit Windows Vista und ist standardmäßig auf neuen Systemen oder Installationen aktiviert. In Windows 8 und höher lässt sich UAC schwieriger deaktivieren.

Aus Sicherheitsgründen verhindert UAC, dass "höhergestellte" Programme (also Programme mit Administratorrechten) von anderen nicht-höhergestellten Programmen automatisiert werden können. Hotkeys werden auch blockiert; zum Beispiel kann ein nicht-höhergestelltes Programm die Tastatureingaben eines höhergestellten Programms nicht ausspionieren.

UAC könnte sich auch negativ auf SendPlay und BlockInput auswirken.

Es gibt folgende Übergangslösungen:

Ich kann mein Skript nicht über das Infobereichssymbol editieren, weil es sich aufgrund eines Fehlers nicht starten lässt. Was soll ich tun?

Du musst den Fehler in deinem Skript beheben, wenn du das Infobereichssymbol zurück haben willst. Aber zuerst musst du die Skript-Datei finden.

Suche AutoHotkey.ahk in den folgenden Verzeichnissen:

Führt man die ausführbare Hauptdatei von AutoHotkey direkt aus, wird automatisch ein Skript gestartet, das den gleichen Namen trägt. Wenn man beispielsweise AutoHotkeyU32.exe ausführt, muss man nach AutoHotkeyU32.ahk suchen. Beachte, dass je nach Systemeinstellung die .ahk-Endung versteckt sein könnte, allerdings sollte die Datei ein Symbol haben, das wie folgt aussieht: [H]

Ein Skript editiert man üblicherweise, indem man die Datei mit der rechten Maustaste anklickt und Edit Script auswählt. Wenn das nicht funktioniert, kannst du die Datei in einem beliebigen Editor öffnen.

Wenn man AutoHotkey über das Startmenü startet oder wenn man AutoHotkey.exe direkt ausführt (ohne Befehlszeilenparameter), wird nach einem Skript gesucht, das in den oben genannten Standorten vorkommt. Oder man erstellt einfach eine Skriptdatei (beliebigerName.ahk), egal wo, und führt diese stattdessen aus.

Siehe auch Befehlszeilenparameter "Skript-Dateiname" und Portabilität von AutoHotkey.exe.

Wie kann ich Fehler in meinem Code finden und beheben?

Für einfache Skripte, siehe Ein Skript debuggen. Mit MsgBox oder ToolTip können Inhalte einer Variable angezeigt werden. Für komplexe Skripte, siehe Interaktives Debuggen.

Warum kann der Run-Befehl mein Spiel oder Programm nicht ausführen?

Einige Programme müssen in ihren eigenen Verzeichnissen gestartet werden (im Zweifelsfall der sicherste Weg). Zum Beispiel:

Run, %ProgramFiles%\Beliebige Anwendung\Anwendung.exe, %ProgramFiles%\Beliebige Anwendung

Wenn man versucht, ein Programm zu starten, das im Ordner %A_WinDir%\System32 liegt, und die 32-Bit-Version von AutoHotkey auf einem 64-Bit-System benutzt, kann es passieren, dass der File System Redirector Probleme bereiten wird. Benutze daher %A_WinDir%\SysNative; dieser Pfad führt zu einem virtuellen Verzeichnis, das nur 32-Bit-Programme auf einem 64-Bit-System sehen können.

Warum funktionieren Hotstrings, Sends und Clicks in einigen Spielen nicht?

Einige Spiele verbieten AHK, Tasten und Mausklicks zu senden oder Pixelfarben zu lesen.

Allerdings gibt es weiter unten ein paar Alternativen, die man ausprobieren kann. Wenn sie alle fehlschlagen, könnte es sein, dass AHK nicht für dein Spiel geeignet ist. Manche Spiele haben Maßnahmen gegen Hacks und Cheats integriert, wie z. B. GameGuard und Hackshield. In diesem Fall besteht eine hohe Chance, dass AutoHotkey nicht funktionieren wird.

Wie kann die Performance für Spiele oder zu einem anderen Zeitpunkt verbessert werden, wenn die CPU stark belastet wird?

Sind Hotkeys, Clicks oder Sends im Skript bei starker CPU-Belastung spürbar langsamer als normal, könnte es hilfreich sein, die Priorität des Skript-Prozesses zu erhöhen. Füge dafür die folgende Zeile ganz oben im Skript ein:

Process, Priority, , High

Mein Antivirus-Programm hat AutoHotkey oder ein kompiliertes Skript als Malware erkannt. Ist das wirklich ein Virus?

Es kann zwar nie ganz kann ausgeschlossen werden, dass die Datei infiziert ist, aber in den meisten Fällen sind solche Warnungen False-Positives (Falschmeldungen); das heißt, dass das Antivirus-Programm falsch liegt. Häufig wird vorgeschlagen, die Datei bei einem Online-Service wie virustotal oder Jotti hochzuladen und zu überprüfen, was andere Antivirus-Programme zu sagen haben. Im Zweifelsfall kannst du die Datei zum Hersteller deines Antivirus-Programms schicken und ihre Echtheit bestätigen lassen. Das würde auch uns und anderen AutoHotkey-Benutzern helfen, weil der Hersteller die Datei als False-Positive anerkennen und sein Produkt entsprechend anpassen würde.

False-Positives können häufiger auftreten, wenn kompilierte Skripte mit UPX (Standard in AutoHotkey 1.0, aber nicht in 1.1) oder MPRESS (optional in AutoHotkey 1.1) komprimiert sind. Da die Standardinstallation von AutoHotkey einen Kompressor nicht beinhaltet, werden kompilierte Skripte standardmäßig nicht komprimiert.

Allgemeine Aufgaben

Wo finde ich den offiziellen Build, oder ältere Versionen?

Siehe Download-Seite von AutoHotkey.

Kann ich AHK von einem USB-Laufwerk ausführen?

Siehe Portabilität von AutoHotkey.exe. Hinweis: Wenn du automatisch einfügende Funktions-Libraries verwendest, müssen AutoHotkey.exe und der Lib-Ordner eine Ebene höher sein als Ahk2Exe.exe (z. B. \AutoHotkey.exe vs \Compiler\Ahk2Exe.exe). Beachte zudem, dass Ahk2Exe seine Einstellungen in den folgenden Registry-Key speichert: HKEY_CURRENT_USER\Software\AutoHotkey\Ahk2Exe.

Wie kann die Ausgabe einer Befehlszeilenoperation abgefragt werden?

Tests zeigen, dass eine temporäre Datei aufgrund von Datei-Caching sehr schnell bei relativ kleinen Ausgaben sein kann. Tatsächlich wird sie gar nicht erst auf das Laufwerk geschrieben, wenn die Datei unmittelbar nach ihrer Verwendung gelöscht wird. Zum Beispiel:

RunWait %comspec% /c dir > C:\Meine Temp-Datei.txt
FileRead, AusgabeVar, C:\Meine Temp-Datei.txt
FileDelete, C:\Meine Temp-Datei.txt

Wenn du temporäre Dateien vermeiden willst (besonders wenn die Ausgabe groß ist), dann verwende die Shell.Exec()-Methode, welche in den Beispielen des Run-Befehls zu finden ist.

Wie kann ein Skript andere Skripte schließen, pausieren oder sperren?

Zunächst ein Beispiel, das ein anderes Skript schließt:

DetectHiddenWindows On  ; Ermöglicht die Erkennung des versteckten Hauptfensters eines Skripts.
SetTitleMatchMode 2  ; Verhindert, dass unten der vollständige Pfad der Datei angegeben werden muss.
WinClose Skript-Dateiname.ahk - AutoHotkey  ; Verwende hier den Namen deines Skripts (zeichengenau).

Um ein anderes Skript zu sperren oder zu pausieren, ersetze die oben genannte letzte Zeile mit eine der folgenden Zeilen:

PostMessage, 0x111, 65305,,, Skript-Dateiname.ahk - AutoHotkey  ; Suspend (Sperren).
PostMessage, 0x111, 65306,,, Skript-Dateiname.ahk - AutoHotkey  ; Pause.

Wie kann eine sich wiederholende Aktion gestoppt werden, ohne das Skript beenden zu müssen?

Um bei Tastendruck das ganze Skript zu pausieren oder fortzusetzen, weise dem Pause-Befehl einen Hotkey wie folgt zu:

^!p::Pause  ; Drücke STRG+ALT+P für Pause. Drückt es nochmal, um fortzufahren.

Um eine sich wiederholende Aktion innerhalb einer Schleife zu stoppen, verwende den folgenden Hotkey, der seine eigene wiederholende Aktion sowohl starten als auch beenden kann. Das heißt, dass durch einmaliges Drücken des Hotkeys die Schleife begonnen und durch nochmaliges Drücken diese wieder beendet wird.

#MaxThreadsPerHotkey 3
#z::  ; WIN+Z (passe diesen Hotkey nach Belieben an).
#MaxThreadsPerHotkey 1
if WinZLaufenLassen  ; Bedeutet, dass ein darunterliegender Thread bereits die untere Schleife ausführt.
{
    WinZLaufenLassen := false  ; Signalisiert dem Thread, die Schleife zu stoppen.
    return  ; Beendet diesen Thread, so dass der darunterliegende fortgesetzt wird und die vorgenommene Änderung der oberen Zeile sehen kann.
}
; Ansonsten:
WinZLaufenLassen := true
Loop
{
    ; Die nächsten vier Zeilen sind Aktionen, die mehrfach ausgeführt werden sollen (passe sie nach Belieben an):
    ToolTip, Drücke erneut WIN+Z, um das hier zu stoppen.
    Sleep 1000
    ToolTip
    Sleep 1000
    ; Lasse den Rest aber unverändert.
    if not WinZLaufenLassen ; Der Benutzer hat die Schleife durch erneutes Drücken von WIN+Z gestoppt.
        break  ; Schleife unterbrechen.
}
WinZLaufenLassen := false  ; Zurücksetzen, damit der Hotkey wieder verwendet werden kann.
return

Wie kann die kontextabhängige Hilfe für AutoHotkey-Befehle in einem beliebigen Editor verwendet werden?

Rajat hat dafür dieses Skript erstellt.

Wie kann man feststellen, dass eine Webseite fertig geladen ist?

Für den Internet Explorer ist das Skript-Beispiel von www.autohotkey.com/forum/topic19256.html (in Verbindung mit DllCall und COM) wahrscheinlich die zuverlässigste Methode. Außerdem kann man den Inhalt der Adress- und Statusleiste abrufen, wenn man die Methode von www.autohotkey.com/forum/topic19255.html verwendet.

Ältere, weniger zuverlässige Methode: Das folgende Beispiel funktioniert bei fast allen Webseiten des Internet Explorers. Eine ähnliche Methode könnte auch bei anderen Browsern funktionieren:

Run, www.yahoo.com
MouseMove, 0, 0  ; Verhindert, dass in der Statusleiste aufgrund der Mausposition ein Link angezeigt wird.
WinWait, Yahoo! -
WinActivate
StatusBarWait, Done, 30
if ErrorLevel
   MsgBox Die Wartezeit ist abgelaufen oder das Fenster wurde geschlossen. 
else
   MsgBox Die Webseite wurde geladen.

Wie können Datums- oder Zeitwerte verglichen oder geändert werden?

Der EnvAdd-Befehl kann eine bestimmte Menge an Tagen, Stunden, Minuten oder Sekunden im YYYYMMDDHH24MISS-Format addieren oder subtrahieren. Das folgende Beispiel subtrahiert 7 Tage von der angegebenen Zeit: EnvAdd, VariableMitZeitstempel, -7, days.

Um die Zeitmenge zwischen zwei Datum- oder Zeitwerten zu ermitteln, siehe EnvSub. Die Built-in-Variable A_Now enthält die aktuelle Ortszeit. Außerdem gibt es noch andere built-interne Datum/Zeit-Variablen, sowie auch den FormatTime-Befehl, um eine benutzerdefinierte Datum/Zeit-Zeichenkette erstellen zu können.

Wie kann ich das aktuelle Datum und/oder Zeit senden?

Mit FormatTime oder built-interne Datum- und Zeit-Variablen.

Wie kann ich Text zu einem Fenster senden, das weder aktiv noch sichtbar ist?

Mit ControlSend.

Wie kann Winamp auch dann gesteuert werden, wenn es nicht aktiv ist?

Siehe Winamp automatisieren.

Wie können die Namen der MsgBox-Buttons geändert werden?

Hier dazu ein Beispiel.

Wie kann ich den Standard-Editor ändern, den man via Kontextmenü oder Infobereichssymbol öffnen kann?

Im Beispiel-Bereich von Edit findest du ein Skript, mit dem der Standard-Editor geändert werden kann.

Wie kann ich die Inhalte der Steuerelemente in ihre zugeordneten Variablen speichern?

Mit Gui Submit. Zum Beispiel:

Gui, Add, Text,, Trage etwas Text ein und drücke Submit:
Gui, Add, Edit, vZugeordneteVar
Gui, Add, Button,, Submit
Gui, Show
Return

ButtonSubmit:
Gui, Submit, NoHide
MsgBox, Inhalt des Edit-Steuerelements: %ZugeordneteVar%
Return

Kann ich mit AHK etwas zeichnen?

Siehe GDI+ standard library von tic. Mit Gui kann auch etwas gezeichnet werden, allerdings auf sehr rudimentärer Weise.

Wie kann ich eine Aktion starten, wenn ein Fenster erscheint, geschlossen oder [in]aktiv wird?

Mit WinWait, WinWaitClose oder WinWait[Not]Active. Siehe von der Community verwaltete FAQ (Windows-Bereich) für weitere Möglichkeiten.

Hotkeys, Hotstrings und Neubelegung

Wie können meine Hotkeys und Hotstrings automatisch bei jedem PC-Start ausgeführt werden?

Es gibt einen Ordner im Startmenü, der sich "Autostart" nennt. Fügst du eine Verknüpfung zu deinem Skript in diesen Ordner ein, wird dein Skript jedes Mal gestartet, wenn du dein PC hochfährst. Um eine Verknüpfung zu erstellen:

  1. Finde die Skript-Datei, markiere sie und drücke STRG+C.
  2. Klicke mit der rechten Maustaste auf Start (üblicherweise in der linken unteren Ecke des Bildschirms) oder im Startmenü auf "Alle Programme" (falls das neue Design aktiv ist) und wähle "Öffnen - Alle Benutzer" aus.
  3. Navigiere zum Autostart-Ordner innerhalb des Programmordners.
  4. Wähle über die Menüleiste Bearbeiten -> Verknüpfung einfügen aus. Die Verknüpfung des Skripts sollte nun im Autostart-Ordner sein.

Ich habe Schwierigkeiten, meine Maustasten als Hotkeys zu definieren. Irgendwelche Hinweise?

Die linke und rechte Maustaste sollten normal zuweisbar sein (zum Beispiel wäre #LButton:: der Hotkey WIN+MAUSTASTE-LINKS). Die mittlere Maustaste und das Mausrad sollten auch normal zuweisbar sein, außer bei Mäusen, deren Tasten direkt vom Treiber gesteuert werden.

Die vierte (XButton1) und fünfte Maustaste (XButton2) sind möglicherweise auch zuweisbar, sofern dein Maustreiber diese Klicks für das System erkennbar macht. Wenn das System diese Tasten nicht erkennen kann (oder wenn neben den 5 Haupttasten noch andere Maustasten erkennbar gemacht werden sollen), kann man versuchen, die Maus so einzustellen, dass sie Tastatureingaben sendet, wenn man bestimmte Maustasten drückt (häufig via mitgelieferte Software, die in der Systemsteuerung oder im Startmenü zu finden ist). Danach könnte man solche Tastatureingaben in einem Skript als Hotkey definieren. Wenn man beispielsweise die vierte Maustaste STRG+F1 senden lässt, kann man sie mithilfe von ^F1:: im Skript indirekt als Hotkey definieren.

Wenn das System die vierte und fünfte Maustaste einer 5-Tasten-Maus nicht erkennen kann, kann man versuchen, den Maustreiber mit dem Standardtreiber des Betriebssystems zu ersetzen. Das setzt voraus, dass so ein Treiber für deine Maus vorhanden ist und dass du ohne den mitgelieferten Features von der Software leben kannst.

Wie können TAB und LEERTASTE als Hotkeys definiert werden?

Benutze die englischen Namen von diesen Tasten (Tab und Space). Zum Beispiel wäre #Space WIN+LEERTASTE und ^!Tab STRG+ALT+TAB.

Wie können Tastatur- oder Maustasten neu belegt werden, so dass sie zu anderen Tasten werden?

Das wird auf der Seite "Neubelegung von Tasten" beschrieben.

Wie kann ich einen doppelten Tastendruck oder Mausklick erkennen?

Verwende die Built-in-Variablen für Hotkeys wie folgt:

~Ctrl::
    if (A_ThisHotkey = A_PriorHotkey && A_TimeSincePriorHotkey < 200)
        MsgBox Doppeldruck
return

Wie kann ein Hotkey oder Hotstring exklusiv für ein bestimmtes Programm gemacht werden? Mit anderen Worten möchte ich eine bestimmte Taste dazu bringen, etwas anderes zu tun, wenn ein bestimmtes Fenster aktiv ist.

Die bevorzugte Methode ist #IfWinActive. Zum Beispiel:

#IfWinActive, ahk_class Notepad
^a::MsgBox Sie haben STRG+A gedrückt, während der Editor aktiv ist.

Wie kann man eine sonst funktionslose Präfix-Taste dazu bringen, ihre ursprüngliche Funktion durchzuführen?

Das folgende Beispiel macht Numpad0 zu einer Präfix-Taste:

Numpad0 & Numpad1::MsgBox, Sie haben Numpad1 gedrückt, während Sie Numpad0 gedrückt halten.

Um Numpad0 nun dazu zu bringen, immer dann eine echte Numpad0-Tastatureingabe zu senden, wenn sie nicht zum Starten eines Hotkeys wie oben benötigt wird, füge den folgenden Hotkey hinzu:

 $Numpad0::Send, {Numpad0}

Das $-Präfix ist notwendig, um eine Warnmeldung im Falle einer Endlosschleife zu unterdrücken (da der Hotkey "sich selbst sendet"). Darüber hinaus wird die obere Aktion erst ausgelöst, wenn die Taste losgelassen wird.

Wie können die systeminternen Tastenkürzel wie WIN+U (Eingabehilfe) und WIN+R (Ausführen) geändert oder deaktiviert werden?

Hier dazu einige Beispiele.

Kann ich Platzhalter oder reguläre Ausdrücke in Hotstrings verwenden?

Verwende das Skript von polyethene (Beispiele sind enthalten).

Wie kann ich einen Hotkey verwenden, der nicht auf meinem Tastaturlayout vorkommt?

Siehe Sondertasten.

Meine Tastatur hat eine besondere 000-Taste. Ist es möglich, diese Taste in ein Hotkey umzuwandeln?

Ja. Dieses Beispiel-Skript wandelt die 000-Taste in eine Gleichheitstaste um. Diese Aktion kann geändert werden, wenn die Zeile Send, = je nach Bedarf mit einer anderen Zeile ersetzt wird.