Hotkeys, Hotstrings und Neubelegung
Wenn AutoHotkey nicht auf normalem Wege installiert werden kann, finden Sie weitere Hilfe unter Wie man AutoHotkey installiert.
Normalerweise sollte, wenn AutoHotkey installiert ist, ein Rechtsklick auf eine AutoHotkey-Skriptdatei (.ahk) die folgenden Optionen bieten:
Hinweis: In Windows 11 befinden sich einige dieser Optionen in einem Untermenü, das über "Weitere Optionen anzeigen" aufgerufen werden kann.
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. Dieses Problem kann durch Löschen des folgenden Registry-Schlüssels behoben werden:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ahk\UserChoice
Sie können hierfür einen Registry-Patch verwenden oder UX\reset-assoc.ahk
im AutoHotkey-Installationsverzeichnis ausführen.
Eventuell müssen Sie auch die Standardwerte in der Registry reparieren, indem Sie entweder AutoHotkey neu installieren oder UX\install.ahk
im AutoHotkey-Installationsverzeichnis ausführen.
Dieses Problem gibt es in mehreren Varianten:
Wenn Sie auf ein anderes Betriebssystem umgestiegen sind, kann es sein, dass sich etwas geändert hat, das sich auf Ihr Skript auswirkt. Haben Sie zum Beispiel einen neuen Computer, 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 das Changelog und die Kompatibilitätshinweise auf Änderungen, die Ihr Skript beeinträchtigen könnten.
Siehe auch die folgende Frage:
Aus Sicherheitsgründen verhindert die Benutzerkontensteuerung (engl. User Account Control, kurz UAC), dass "höherberechtigte" Programme (also Programme mit Adminrechten) von anderen, nicht-höherberechtigten Programmen automatisiert werden können. Auch Hotkeys werden blockiert, so dass bspw. ein nicht-höherberechtigtes Programm keine Eingaben mitlesen kann, die für ein höherberechtigtes Programm bestimmt sind.
UAC kann sich auch negativ auf SendPlay und BlockInput auswirken.
Es gibt folgende Übergangslösungen:
Run '*UIAccess "Dein Skript.ahk"'
."AutoHotkey32_UIA.exe" "Dein Skript.ahk"
(aber fügen Sie ggf. vollständige Pfade ein).Sie müssen den Fehler in Ihrem Skript beheben, wenn Sie das Tray-Symbol zurückhaben wollen. Dazu ist es erforderlich, das Skript zu finden und in einem Texteditor zu öffnen, aber nicht über das Tray-Symbol, sondern auf andere Weise.
Wenn Sie eine AutoHotkey-EXE-Datei direkt ausführen, wird automatisch ein Skript mit demselben Namen gestartet. Führen Sie beispielsweise AutoHotkey32.exe aus, müssen Sie nach AutoHotkey32.ahk im selben Verzeichnis 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:
Normalerweise können Sie eine Skriptdatei editieren, indem Sie darauf rechtsklicken und Edit Script auswählen. Wenn das nicht funktioniert, öffnen Sie die Datei in Notepad oder in einem anderen Texteditor.
In der Regel sollten Sie eine Skriptdatei erstellen (irgendetwas.ahk), egal wo, und diese Skriptdatei ausführen, anstatt AutoHotkey zu starten.
Siehe auch Befehlszeilenparameter "Skriptdateiname" und Portabilität von AutoHotkey.exe.
Für einfache Skripte siehe Ein Skript debuggen. Um den Inhalt einer Variable anzuzeigen, verwenden Sie MsgBox oder ToolTip. Für komplexe Skripte siehe Interaktives Debuggen.
Einige Programme müssen in ihrem eigenen Verzeichnis gestartet werden (was im Zweifelsfall immer getan werden sollte). Zum Beispiel:
Run ProgramFiles "\Beliebige Anwendung\Anwendung.exe", ProgramFiles "\Beliebige Anwendung"
Wenn Sie mit der 32-Bit-Version von AutoHotkey auf einem 64-Bit-System ein Programm starten wollen, das sich im Ordner A_WinDir "\System32"
befindet, kann es sein, dass die Dateisystemumleitung Probleme macht. 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 auf einem 64-Bit-System sehen können.
Kurze Antwort: Speichern Sie das Skript unter UTF-8, vorzugsweise mit BOM.
ASCII-fremde Zeichen haben je nach gewählter Kodierung unterschiedliche Binärwerte. Damit solche Zeichen korrekt interpretiert werden, müssen Ihr Texteditor und AutoHotkey sozusagen die gleiche Codepage verwenden. AutoHotkey v2 verwendet standardmäßig UTF-8 für alle Skriptdateien, was aber mit der Befehlszeilenoption /CP überschrieben werden kann.
Es wird empfohlen, das Skript unter UTF-8 mit BOM (Byte Order Mark) zu speichern, um sicherzustellen, dass Editoren (und möglicherweise andere Programme) zweifelsfrei erkennen können, dass die Datei UTF-8 ist. Ohne BOM muss der Editor die Kodierung der Datei erraten, was manchmal falsch sein kann.
Um eine Datei in Notepad unter UTF-8 zu speichern, wählen Sie UTF-8 oder UTF-8 mit BOM in der ausklappbaren Liste neben Kodierung im Dialogfenster "Speichern unter" aus. Beachten Sie, dass Notepad in Windows 10 v1903 und höher standardmäßig UTF-8 (ohne BOM) verwendet.
Um BOM-lose UTF-8-Dateien zu lesen, verwenden Sie FileEncoding "UTF-8-RAW"
, die *P65001
-Option mit FileRead oder "UTF-8-RAW"
im dritten Parameter von FileOpen. Sie können das -RAW
-Suffix weglassen, aber dann werden alle neuen Dateien eine BOM haben.
Beachten Sie, dass INI-Dateien, die mit den Standard-INI-Funktionen gelesen oder geschrieben werden, UTF-8 nicht unterstützen; sie müssen unter ANSI oder UTF-16 gespeichert sein.
Nicht immer ist es bei Videospielen möglich, ihnen Tasten oder Mausklicks zu senden oder ihre Pixelfarben zu lesen.
Es gibt jedoch einige Alternativen, die Sie ausprobieren können. Wenn alle fehlschlagen, ist AutoHotkey möglicherweise nicht für Ihr Videospiel geeignet. Einige Videospiele haben eingebaute Maßnahmen gegen Hacks und Cheats, wie z.B. GameGuard und Hackshield. In diesem Fall besteht eine hohe Chance, dass AutoHotkey nicht funktioniert.
Verwenden Sie SendPlay via SendPlay-Funktion, SendMode Play und/oder Hotstring-Option SP.
SendPlay "abc"
SendMode "Play" Send "abc"
:SP:bzw::beziehungsweise ; oder #Hotstring SP ::bzw::beziehungsweise
Hinweis: SendPlay funktioniert möglicherweise nicht, wenn die Benutzerkontensteuerung (engl. User Account Control, kurz 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"
Probieren Sie ControlSend aus, das in manchen Situationen besser funktioniert als die anderen Send-Modi:
ControlSend "abc",, SpielTitel
Probieren Sie das Down- und Up-Ereignis einer Taste mit verschiedenen Sendemethoden aus:
Send "{TASTE Down}{TASTE Up}"
Probieren Sie das Down- und Up-Ereignis einer Taste mit einem Sleep dazwischen aus:
Send "{TASTE down}" Sleep 10 ; Probieren Sie verschiedene Millisekunden aus. Send "{TASTE up}"
Wenn Hotkeys, Clicks oder Sends bei hoher CPU-Last spürbar langsamer als normal sind, kann es helfen, die Prozesspriorität des Skripts zu erhöhen. Fügen Sie dazu die folgende Zeile am Anfang des Skripts ein:
ProcessSetPriority "High"
Es kann zwar nie ganz ausgeschlossen werden, dass die Datei infiziert ist, aber in den meisten Fällen handelt es sich bei solchen Warnungen um False-Positives (Falschmeldungen), d.h. das Antivirenprogramm irrt sich. Oft wird vorgeschlagen, die Datei bei einem Onlinedienst wie virustotal oder Jotti hochzuladen, um zu sehen, was andere Antivirenprogramme melden. Im Zweifelsfall kann man die Datei an den Hersteller des Antivirenprogramms schicken und sich die Echtheit bestätigen lassen. Das würde auch uns und anderen AutoHotkey-Benutzern helfen, da der Hersteller diese Warnung möglicherweise als False-Positive einstuft und sein Programm so anpasst, dass es reibungslos mit AutoHotkey funktioniert.
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 keinen Kompressor enthält, werden kompilierte Skripte standardmäßig nicht komprimiert.
Auf der Download-Seite von AutoHotkey.
Siehe Portabilität von AutoHotkey.exe.
Um die Ausgabe einer Befehlszeilenoperation abzurufen, können Sie eine temporäre Datei verwenden. Tests haben gezeigt, dass diese Methode bei relativ kleinen Ausgaben aufgrund von Datei-Caching sehr schnell sein kann. Tatsächlich wird die Datei oft gar nicht auf das Laufwerk geschrieben, wenn sie sofort nach ihrer Verwendung gelöscht wird. Zum Beispiel:
RunWait A_ComSpec ' /c dir > C:\Meine Temp-Datei.txt' VarMitInhalt := FileRead("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 bei den Beispielen zur Run-Funktion zu finden ist.
Hier zunächst ein Beispiel, das ein anderes Skript schließt:
DetectHiddenWindows True ; 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).
Wenn ein anderes Skript suspendiert, pausiert oder neu geladen werden soll, 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 das gesamte Skript auf Tastendruck zu pausieren oder fortzusetzen, weisen Sie der Pause-Funktion einen Hotkey wie folgt zu:
^!p::Pause ; Drücke Strg+Alt+P zum Pausieren. Drücke erneut zum Fortsetzen.
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 stoppt. Durch einmaliges Drücken des Hotkeys wird die Schleife gestartet, durch erneutes Drücken wird sie gestoppt.
#MaxThreadsPerHotkey 3 #z:: ; WIN+Z (passen Sie diesen Hotkey Ihren Bedürfnissen an). { static WinZLaufenLassen := false if WinZLaufenLassen ; Bedeutet, dass ein darunter liegender Thread die Schleife unten bereits ausführt. { WinZLaufenLassen := false ; Signalisiert der Schleife zu stoppen. return ; Beendet diesen Thread, damit der darunter liegende weiterläuft und die Änderung von der Zeile oben sieht. } ; Andernfalls: 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 signalisierte den Stopp der Schleife durch erneutes Drücken von WIN+Z. break ; Unterbricht die Schleife. } WinZLaufenLassen := false ; Setzt den Wert zum Wiederverwenden des Hotkeys zurück. } #MaxThreadsPerHotkey 1
Rajat hat dafür dieses Skript geschrieben.
Für den Internet Explorer ist DllCall in Kombination mit COM wohl die zuverlässigste Methode; ein Beispiel dazu finden Sie in diesem archivierten Forumsthread. Es ist auch möglich, den Inhalt der Adress- und Statusleiste abzurufen, wie in diesem archivierten Forumsthread gezeigt.
Ä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 aufgrund der Mausposition ein Link in der Statusleiste angezeigt wird. WinWait "Yahoo! - " WinActivate if StatusBarWait("Done", 30) MsgBox "Die Webseite wurde geladen." else MsgBox "Die Wartezeit ist abgelaufen oder das Fenster wurde geschlossen."
Die DateAdd-Funktion kann eine bestimmte Anzahl von Tagen, Stunden, Minuten oder Sekunden im YYYYMMDDHH24MISS-Format addieren oder subtrahieren. Das folgende Beispiel subtrahiert 7 Tage von einer bestimmten Zeit:
Ergebnis := DateAdd(VarMitZeitstempel, -7, "days")
Um die Zeitmenge zwischen zwei Datums- oder Zeitwerten zu ermitteln, sehen Sie sich das Beispiel in DateDiff an. Die interne Variable A_Now enthält die aktuelle Ortszeit. Des Weiteren gibt es mehrere interne Datum/Zeit-Variablen, sowie die FormatTime-Funktion, um eine benutzerdefinierte Datum/Zeit-Zeichenkette zu erzeugen.
Mit FormatTime oder internen Datum/Zeit-Variablen.
Mit ControlSend.
Siehe Winamp automatisieren.
Hier dazu ein Beispiel.
Im Beispielabschnitt von Edit finden Sie ein Skript, mit dem Sie den Standardeditor ändern können.
Mit Gui.Submit. Zum Beispiel:
MeineGui := Gui() MeineGui.Add("Text",, "Tragen Sie etwas Text ein und drücken Sie Submit:") MeineGui.Add("Edit", "vMeinEdit") MeineGui.Add("Button",, "Submit").OnEvent("Click", Submit) MeineGui.Show Submit(*) { Gespeichert := MeineGui.Submit(false) MsgBox "Inhalt des Edit-Steuerelements: " Gespeichert.MeinEdit }
Siehe GDI+ standard library von tic. Mit Gui kann man auch etwas zeichnen, aber nur sehr rudimentär.
Mit WinWait, WinWaitClose oder WinWait[Not]Active.
Es gibt von Benutzern 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) im archivierten Forum.
Es gibt mehrere Möglichkeiten, ein Skript (oder ein anderes Programm) beim Start von Windows auszuführen. Am einfachsten ist es, eine Verknüpfung zur Skriptdatei im Autostart-Ordner zu platzieren:
shell:startup
ein und klicken Sie auf OK oder drücken Sie Enter. Der Autostart-Ordner des aktuellen Benutzers wird geöffnet. Um stattdessen den Ordner aller Benutzer zu öffnen, geben Sie shell:common startup
ein (in diesem Fall benötigen Sie jedoch Adminrechte).Die linke und rechte Maustaste sollten normal belegbar sein (z.B. ist #LButton::
der Hotkey Win+MAUSTASTE-LINKS). Die mittlere Maustaste und das Mausrad sollten ebenfalls normal belegbar sein, außer bei Mäusen, deren Tasten direkt vom Treiber gesteuert werden.
Die vierte (XButton1) und fünfte Maustaste (XButton2) können ebenfalls belegt werden, sofern Ihr Maustreiber diese Klicks für das System erkennbar macht. Wenn das System diese Tasten nicht erkennt (oder um neben den 5 Haupttasten noch andere Maustasten erkennbar zu machen), können Sie versuchen, die Maus mittels eigener Software so einzustellen (manchmal über die Systemsteuerung oder das Startmenü zugänglich), dass sie einen Tastendruck sendet, wenn Sie eine dieser Maustasten drücken. Dieser Tastendruck kann dann in einem Skript als Hotkey definiert werden. Wenn Sie zum Beispiel die vierte Maustaste so einstellen, dass sie Strg+F1 sendet, können Sie diese Maustaste indirekt als Hotkey definieren, indem Sie ^F1::
in einem Skript verwenden.
Wenn Sie eine 5-Tasten-Maus besitzen, aber das System die vierte und fünfte Maustaste nicht erkennt, können Sie versuchen, den Maustreiber mit dem Standardtreiber des Betriebssystems zu ersetzen. Dies setzt voraus, dass so ein Treiber für Ihre Maus vorhanden ist und dass Sie auf die Features, die die Software Ihrer Maus normalerweise bereitstellt, verzichten können.
Benutzen Sie die englischen Namen dieser Tasten (Tab und Space). Zum Beispiel: #Space
ist Win+Leer und ^!Tab
ist Strg+Alt+Tab.
Informationen dazu finden Sie unter Neubelegung von Tasten.
Verwenden Sie die internen Hotkey-Variablen wie folgt:
~Ctrl:: { if (ThisHotkey = A_PriorHotkey && A_TimeSincePriorHotkey < 200) MsgBox "Doppeldruck" }
Die bevorzugte Methode ist #HotIf. Zum Beispiel:
#HotIf WinActive("ahk_class Notepad") ^a::MsgBox "Sie haben STRG+A gedrückt, während Notepad aktiv ist."
Das folgende Beispiel macht aus Numpad0 eine Präfixtaste:
Numpad0 & Numpad1::MsgBox "Sie haben Numpad1 gedrückt, während Sie Numpad0 gedrückt hielten."
Um nun Numpad0 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"). Außerdem wird die obige Aktion erst ausgelöst, wenn die Taste losgelassen wird.
Hier einige Beispiele.
Verwenden Sie das Skript von polyethene (Beispiele sind enthalten).
Siehe Sondertasten.
Ja, es ist möglich. 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.