Hotkeys, Hotstrings und Neubelegung
Doppelte Anführungszeichen (") haben nur innerhalb von Ausdrücken eine besondere Bedeutung. Überall woanders werden sie als normale Zeichen behandelt. Wenn ein Skript allerdings ein Programm oder Dokument startet, müssen eventuell vorhandene Befehlszeilenparameter, die Leerzeichen enthalten, in Anführungszeichen gesetzt sein, damit das Betriebssystem sie richtig erkennen kann. Zum Beispiel: Run, Notepad.exe "C:\Meine Dateien\Adressenliste.txt"
.
Variablennamen werden immer mit Prozentzeichen umschlossen, außer in den unteren Fällen, die fett hervorgehoben sind:
StringLen, AusgabeVar, EingabeVar
Var = 123abc
If Var1 < %Var2%
If (Var1 <> Var2) Var1 := Var2 + 100
Weitere Informationen zur Verwendung von Prozentzeichen finden Sie unter Altmodische Syntax und Dynamische Variablen. Prozentzeichen können auch andere Bedeutungen haben:
`%
) und Prozentzeichen innerhalb von in Anführungszeichen gesetzten, direkt geschriebenen Zeichenketten haben keine besondere Bedeutung (sie werden als direkt geschriebene Prozentzeichen interpretiert).Direkt geschriebene 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`%
. Direkt geschriebene Kommas müssen auch mit einem Escapezeichen versehen werden (`,
), es sei denn, sie werden in einer MsgBox oder im letzten Parameter eines Befehls verwendet (dann 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%"
.
7-Zip-Fehler: Verwenden Sie 7-Zip oder ein kompatibles Programm, um die Setup-Dateien aus der Installer-EXE zu extrahieren und starten Sie dann setup.exe oder Installer.ahk (ziehen Sie Installer.ahk mit gedrückter Maustaste auf AutoHotkeyU32.exe und lassen Sie 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, können Sie eine oder beide folgende Methoden ausprobieren:
setup.exe /S
oder AutoHotkeyU32.exe Installer.ahk /S
verwenden.Sonstiges: Die obigen Vorschläge decken die häufigsten Probleme. Weitere Unterstützung finden Sie im Forum.
Normalerweise, wenn AutoHotkey installiert ist, sollte ein Rechtsklick auf eine AutoHotkey-Skriptdatei (.ahk) die folgenden Optionen bieten:
Manchmal werden diese Optionen durch Einstellungen im Profil des aktuellen Benutzers überschrieben, z. B. wenn Öffnen mit verwendet wurde, um das Standardprogramm zum Öffnen von .ahk-Dateien zu ändern. Um das zu beheben, können Sie den folgenden Registry-Schlüssel löschen:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ahk\UserChoice
Oder diesen Registry-Patch ausführen.
Es ist eventuell auch notwendig, die Standardwerte in der Registry zu reparieren, indem Sie entweder AutoHotkey neu installieren oder das AutoHotkey-Setup (aus dem Startmenü) ausführen und apply oben im Fenster auswählen.
Um bestimmte Zeilen sofort beim Start des Skripts auszuführen, fügen Sie diese am Anfang des Skripts ein, noch vor dem ersten Hotkey, Hotstring oder Return. Weitere Informationen finden Sie unter automatischer Ausführungsbereich.
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
Dieses Problem tritt in mehreren Varianten auf:
Wenn Sie auf ein anderes Betriebssystem gewechselt haben, kann es sein, dass sich auch etwas geändert hat, das Einfluss auf Ihr Skript haben kann. Wenn Sie zum Beispiel einen neuen Computer haben, können andere Treiber oder Software installiert sein. Wenn Sie AutoHotkey auf eine neue Version aktualisiert haben, finden Sie heraus, welche Version zuvor installiert war, und überprüfen Sie dann die Changelog und Kompatibilitätshinweise auf Änderungen, die Ihr Skript stören könnten.
SoundGet, SoundSet, SoundGetWaveVolume und SoundSetWaveVolume verhalten sich in Windows Vista und höher anders als in älteren Windows-Versionen. Das liegt vor allem daran, dass die Nummerierung der Geräte unterschiedlich ist und dass einige Komponenten eventuell nicht verfügbar sind. 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:
Aus Sicherheitsgründen verhindert die Benutzerkontensteuerung (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:
"AutoHotkeyU32_UIA.exe" "Ihr Skript.ahk"
benutzen (aber mit vollständigem Pfad).Sie müssen den Fehler in Ihrem Skript beheben, wenn Sie das Tray-Symbol zurückhaben wollen. Aber zuerst müssen Sie die Skript-Datei finden.
Suchen Sie 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. Beachten Sie, dass je nach Systemeinstellung die .ahk-Endung versteckt sein könnte, allerdings sollte die Datei ein Symbol haben, das wie folgt aussieht:
Ein Skript editiert man üblicherweise, indem man die Datei mit der rechten Maustaste anklickt und Edit Script auswählt. Wenn das nicht funktioniert, können Sie die Datei in einem beliebigen Texteditor ö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.
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.
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. Um das zu umgehen, können Sie stattdessen %A_WinDir%\SysNative
verwenden; dieser Pfad führt zu einem virtuellen Verzeichnis, das nur 32-Bit-Programme in einem 64-Bit-System sehen können.
Kurze Antwort: Speichern Sie das Skript als UTF-8 mit BOM.
Obwohl AutoHotkey Unicode-Text unterstützt, ist es auf Abwärtskompatibilität ausgelegt; das heißt, dass es standardmäßig die ANSI-Codierung bevorzugt, und nicht das international empfohlene UTF-8. AutoHotkey wird eine UTF-8-Datei nicht automatisch erkennen, es sei denn, sie beginnt mit einer Byte-Order-Markierung.
Mit anderen Worten: UTF-8-Dateien, die keine Byte-Order-Markierung haben, werden fehlinterpretiert, was dazu führt, dass ASCII-fremde Zeichen falsch dekodiert werden. Um das zu umgehen, müssen Sie die Datei als UTF-8 mit BOM abspeichern oder die Befehlszeilenoption /CP65001 hinzufügen.
Um in Notepad eine Datei als UTF-8 mit BOM abzuspeichern, wählen Sie UTF-8 in der DropDown-Liste für Codierung aus, die im Dialogfenster "Speichern unter" zu finden ist.
Um andere UTF-8-Dateien ohne Byte-Order-Markierung zu lesen, können Sie FileEncoding UTF-8-RAW
, die *P65001
-Option mit FileRead oder "UTF-8-RAW"
im dritten Parameter von FileOpen() verwenden. Das -RAW
-Suffix kann weggelassen werden, aber in diesem Fall haben alle neu erstellten Dateien eine Byte-Order-Markierung.
Beachten Sie, dass INI-Dateien, die mit den Standard-INI-Befehlen angesteuert werden, kein UTF-8 unterstützen; sie müssen als ANSI oder UTF-16 gespeichert werden.
Einige Videospiele 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 Ihr Videospiel geeignet ist. Manche Videospiele 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.
Verwenden Sie SendPlay via SendPlay-Befehl, SendMode Play und/oder Hotstring-Option SP.
SendPlay, abc
SendMode, Play Send, abc
:SP:bzw::beziehungsweise ; oder #Hotstring SP ::bzw::beziehungsweise
Hinweis: SendPlay hat in Windows Vista oder höher möglicherweise überhaupt keine Wirkung, wenn die Benutzerkontensteuerung (UAC) aktiviert ist, auch wenn das Skript als Administrator ausgeführt wird.
Erhöhen Sie SetKeyDelay. Zum Beispiel:
SetKeyDelay, 0, 50 SetKeyDelay, 0, 50, Play
Versuchen Sie es mit ControlSend. ControlSend könnte dort funktionieren, wo andere Send-Modi versagen:
ControlSend,, abc, Videospiel_Titel
Versuchen Sie es mit dem Down- und Up-Ereignis einer Taste, in Verbindung mit verschiedenen Sendemethoden:
Send {TASTE down}{TASTE up}
Versuchen Sie es mit dem Down- und Up-Ereignis einer Taste, in Verbindung mit einem Sleep dazwischen:
Send {TASTE down} Sleep 10 ; probieren Sie verschiedene Millisekunden aus Send {TASTE up}
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ügen Sie dazu die folgende Zeile am Anfang des Skripts ein:
Process, Priority, , High
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 können Sie die Datei zum Hersteller Ihres 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.
Siehe Download-Seite von AutoHotkey.
Siehe Portabilität von AutoHotkey.exe.
Hinweis: Wenn Sie ein Skript kompilieren, das automatisch einfügende Funktionsbibliotheken verwendet, müssen AutoHotkey.exe und der Lib-Ordner eine Ebene höher sein als Ahk2Exe.exe (z. B. \AutoHotkey.exe vs \Compiler\Ahk2Exe.exe). Beachten Sie zudem, dass Ahk2Exe seine Einstellungen in den folgenden Registry-Schlüssel speichert: HKCU\Software\AutoHotkey\Ahk2Exe
. Der Compiler selbst (Ahk2Exe) wird nicht benötigt, um Skripte auszuführen.
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, VarMitInhalt, C:\Meine Temp-Datei.txt FileDelete, C:\Meine Temp-Datei.txt
Wenn Sie temporäre Dateien vermeiden wollen (besonders wenn die Ausgabe groß ist), sollten Sie die Shell.Exec()-Methode verwenden, die in den Beispielen des Run-Befehls zu finden ist.
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 SkriptDateiName.ahk - AutoHotkey ; Verwenden Sie hier den Namen Ihres Skripts (Groß-/Kleinschreibung-sensitiv).
Soll ein anderes Skript suspendiert, pausiert oder neu geladen werden, ersetzen Sie die letzte Zeile oben mit eine der folgenden Zeilen:
PostMessage, 0x0111, 65305,,, SkriptDateiName.ahk - AutoHotkey ; Suspendieren. PostMessage, 0x0111, 65306,,, SkriptDateiName.ahk - AutoHotkey ; Pausieren. PostMessage, 0x0111, 65303,,, SkriptDateiName.ahk - AutoHotkey ; Neu laden.
Um bei Tastendruck das ganze Skript zu pausieren oder fortzusetzen, weisen Sie wie folgt dem Pause-Befehl ein Hotkey zu:
^!p::Pause ; Drücken Sie STRG+ALT+P, um die Pause zu starten. Drücken Sie es nochmal, um die Pause zu beenden.
Um eine sich wiederholende Aktion innerhalb einer Schleife zu stoppen, verwenden Sie den folgenden Hotkey, der seine eigene sich wiederholende Aktion sowohl startet als auch beendet. 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 (passen Sie diesen Hotkey Ihren Bedürfnissen 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, damit der darunterliegende Thread zu einem fortgesetzt wird und zum anderen die obere Zuweisung sehen kann. } ; Ansonsten: WinZLaufenLassen := true Loop { ; Die nächsten vier Zeilen sind die Aktionen, die wiederholt werden sollen (passen Sie sie Ihren Bedürfnissen an): ToolTip, Drücken Sie erneut WIN+Z`, um das hier zu stoppen. Sleep 1000 ToolTip Sleep 1000 ; Lassen Sie den Rest aber unverändert. if not WinZLaufenLassen ; Der Benutzer hat die Schleife durch erneutes Drücken von WIN+Z gestoppt. break ; Unterbricht die Schleife. } WinZLaufenLassen := false ; Setzt den Wert zum Wiederverwenden des Hotkeys zurück. return
Rajat hat dafür dieses Skript erstellt.
Für den Internet Explorer ist DllCall() in Kombination mit COM die wohl zuverlässigste Methode; ein Beispiel dazu finden Sie unter www.autohotkey.com/forum/topic19256.html. 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 für fast alle Webseiten des Internet Explorers. Eine ähnliche Methode könnte auch für andere Browser 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.
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 einer bestimmten Zeit: EnvAdd, VariableMitZeitstempel, -7, days
.
Um die Zeitmenge zwischen zwei Datum- oder Zeitwerten zu ermitteln, sollten Sie sich das Beispiel in EnvSub anschauen. Die interne Variable A_Now enthält die aktuelle Ortszeit. Außerdem gibt es noch andere interne Datum/Zeit-Variablen, sowie auch den FormatTime-Befehl, um eine benutzerdefinierte Datum/Zeit-Zeichenkette erstellen zu können.
Mit FormatTime oder internen Datum- und Zeit-Variablen.
Mit ControlSend.
Siehe Winamp automatisieren.
Hier dazu ein Beispiel.
Im Beispiel-Bereich von Edit finden Sie ein Skript, mit dem der Standard-Texteditor geändert werden kann.
Mit Gui Submit. Zum Beispiel:
Gui, Add, Text,, Tragen Sie etwas Text ein und drücken Sie Submit: Gui, Add, Edit, vZugeordneteVar Gui, Add, Button,, Submit Gui, Show Return ButtonSubmit: Gui, Submit, NoHide MsgBox, Inhalt des Edit-Steuerelements: %ZugeordneteVar% Return
Siehe GDI+ standard library von tic. Mit Gui kann auch etwas gezeichnet werden, allerdings auf sehr rudimentärer Weise.
Mit WinWait, WinWaitClose oder WinWait[Not]Active.
Es gibt auch vom Benutzer erstellte Lösungen wie OnWin.ahk und [How to] Hook on to Shell to receive its messages (wie man auf Shell zugreifen kann, um dessen Meldungen abzurufen).
Es gibt mehrere Möglichkeiten, wie man ein Skript (oder ein beliebiges Programm) ausführt, während Windows gestartet wird. Der einfachste Weg ist es, eine Verknüpfung der Skriptdatei im Autostart-Ordner zu platzieren:
shell:startup
ein und klicken Sie auf OK oder drücken Sie Enter. Daraufhin öffnet sich der Autostart-Ordner des aktuellen Benutzers. Um stattdessen den Ordner für alle Benutzer zu öffnen, geben Sie shell:common startup
ein (in diesem Fall müssen Sie jedoch über administrative Rechte verfügen).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 Ihr 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 Tastendrücke sendet, wenn bestimmte Maustasten gedrückt werden (häufig via mitgelieferte Software, die in der Systemsteuerung oder im Startmenü zu finden ist). Danach könnte man solche Tastendrücke 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 Ihre Maus vorhanden ist und dass Sie ohne die mitgelieferten Features von der Software leben können.
Benutzen Sie die englischen Namen von diesen Tasten (Tab und Space). Zum Beispiel wäre #Space
Win+Leer und ^!Tab
Strg+Alt+Tab.
Das wird auf der Seite "Neubelegung von Tasten" beschrieben.
Verwenden Sie die internen Variablen für Hotkeys wie folgt:
~Ctrl:: if (A_ThisHotkey = A_PriorHotkey && A_TimeSincePriorHotkey < 200) MsgBox Doppeldruck return
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.
Das folgende Beispiel macht Numpad0 zu einer Präfix-Taste:
Numpad0 & Numpad1::MsgBox, Sie haben Numpad1 gedrückt, während Sie Numpad0 gedrückt hielten.
Um Numpad0 nun dazu zu bringen, immer dann einen echten Numpad0-Tastendruck zu senden, wenn die Taste nicht zum Starten eines Hotkeys wie oben benötigt wird, fügen Sie den folgenden Hotkey hinzu:
$Numpad0::Send, {Numpad0}
Das $-Präfix ist notwendig, um ein Warndialogfenster 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.
Hier dazu einige Beispiele.
Verwenden Sie das Skript von polyethene (Beispiele sind enthalten).
Siehe Sondertasten.
Ja. Dieses Beispiel-Skript lässt 000 ein Gleichheitszeichen senden. Um stattdessen eine andere Aktion ausführen zu lassen, ersetzen Sie Send, =
mit eine oder mehrere Zeilen Ihrer Wahl.