Frequently Asked Questions (FAQ)


Sprach-Syntax

Allgemein

Hotkeys, Hotstrings und Remapping

Sprach-Syntax

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

Anführungszeichen (") haben nur innerhalb von Ausdrücken eine besondere Bedeutung. Überall sonst werden sie wie normale Buchstaben/Zeichen behandelt. Wenn allerdings ein Skript ein Programm oder Dokument startet/öffnet, erwartet das Betriebssystem Anführungszeichen vor und hinter jedem Kommandozeilen-Parameter, der Leerzeichen enthält, wie in diesem Beispiel:

Run, Notepad.exe "C:\Meine Dokumente\Adress-Liste.txt"

Wann genau werden Variablennamen mit Prozentzeichen umschlossen?

Variablen werden immer in Prozentzeichen eingeschlossen mit Ausnahme der untenstehenden fett ausgezeichneten Beispiele:

1) In Parametern, die Eingangs- oder Ergebnisvariablen sind: StringLen, OutputVar , InputVar
2) Links von Zuweisungen: Var = 123abc
3) Links von traditionellen (non-expression) if-Statements: If Var1 < %Var2%
4) Überall in Ausdrücken. Beispiel:
If (Var1 <> Var2)
Var1 := Var2
+ 100

Wann sollten Prozentzeichen und Kommas escaped werden??

Buchstäbliche Prozentzeichen müssen durch voranstellen eines Graves ` (Betonungszeichen) |Fingerzeigescaped werden. Beispiel: MsgBox Der aktuelle Prozentsatz ist 25`%. Buchstäbliche Kommas müssen ebenfalls escaped werden (`,), allerdings nicht, wenn sie in MsgBox oder als letzter Parameter eines Befehls verwendet werden (in diesem Fall ist das Grave erlaubt, aber nicht notwendig).

Wenn Kommas oder Prozentzeichen innerhalb eines Ausdrucks in Anführungszeichen eingeschlossen sind, ist das Grave erlaubt, aber nicht notwendig. Beispiel: Var := "15%"

Allgemein

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

Jede Zeile, die Sie beim Skriptstart sofort ausgeführt haben wollen, sollte ganz oben im Skript stehen, vor dem ersten Hotkey, Hotstring oder Return. Einzelheiten im Abschnitt Auto-execute.

Auch muss ein Hotkey, der mehr als eine Zeile ausführt, seine erste Zeile unter dem Hotkey haben statt in derselben Zeile. 

Beispiel:

#space:: Win+Leertaste
Run Notepad
WinWaitActive Unbenannt - Editor
WinMaximize
Return

Warum kann der Run-Befehl mein Spiel oder Programm nicht starten?

Einige Programme müssen in ihren eigenen Ordnern gestartet werden (wenn Sie nicht sicher sind, ist dies das Beste). Beispiel:

Run, %A_ProgramFiles%\Anwendung\Anw.exe, %A_ProgramFiles%\Anwendung

Wie kann man die Ausgabe einer Befehlszeilen-Operation abrufen?

Man kann es testen: Da Dateien in den Cache aufgenommen werden, kann eine temporäre Datei bei relativ kleinen Ausgaben sehr schnell sein. Wenn die Datei sofort nach Benutzung gelöscht wird, wird sie oft noch nicht mal auf die Festplatte geschrieben. 

Beispiel:

RunWait %comspec% /c dir > C:\Temp.txt
FileRead, Inhalt, C:\Temp.txt
FileDelete, C:\Temp.txt

Um eine temporäre Datei zu vermeiden - insbesondere, wenn die Ausgabe groß ist - , könnten Sie CmdRet benutzen. Alternativ dazu gibt es das kleine Freeware-Utility cb.zip (4 KB), das bis zu 512 KB Output eines Befehls oder Programms erfassen kann. Der Text wird in die Zwischenablage geschrieben, auf die ein Skript per Clipboard-Variable zugreifen kann. 

Beispiel:

RunWait %comspec% /c dir | cb.exe
MsgBox %clipboard%

Wie kann ein Skript andere Skripts beenden, anhalten oder sperren?

Zuerst ein Beispiel, das ein fremdes Skript beendet:

DetectHiddenWindows On ; Damit können versteckte Hauptfenster eines Skripts erkannt werden.
SetTitleMatchMode 2 ; Hierdurch braucht man nicht den kompletten Pfad der untenstehenden Datei anzugeben.
WinClose Skriptname.ahk - AutoHotkey ; Tragen Sie hier den Dateinamen des Skripts ein (case sensitive).

Um ein anderes Skript zu unterbrechen oder anzuhalten, ersetzen Sie die letze Zeile (s. o.) mit einer der folgenden:

PostMessage, 0x111, 65305,,, Dateiname des Skripts - AutoHotkey ;Unterbrechen.
PostMessage, 0x111, 65306,,, Dateiname des Skripts - AutoHotkey ;Pause.

Wie kann man eine sich wiederholende Aktion stoppen, ohne das Skript zu beenden?

Um das ganze Skript per Tastendruck zu unterbrechen oder anzuhalten, weisen Sie dem Pause-Befehl einen Hotkey zu wie im folgenden Beispiel:

^!p::Pause Drücken Sie Strg+Alt+P zum Anhalten, und ein zweites Mal zum Weitermachen.

Um Aktionen anzuhalten, die sich innerhalb einer Loop wiederholen, schauen Sie sich das folgende funktionierende Beispiel an: einen Hotkey, der seine eigene sich wiederholende Aktion startet und beendet. Mit anderen Worten: Bei ersten Drücken startet die Loop, bei zweiten Mal hält sie wieder an.

#MaxThreadsPerHotkey 3
#z:: ; Win+Z hotkey (Passen Sie diesen Hotkey Ihren Wünschen an.)
#MaxThreadsPerHotkey 1
if KeepWinZRunning ; Dies heißt, dass ein darunterliegender Thread schon in der folgenden Loop läuft.
{
KeepWinZRunning := false ; Signalisiert, dass die Loop des Threads anhalten soll.
return ; Beendet diesen Thread; dadurch startet der darunterliegende Thread neu und "bemerkt" die Änderungen, die die vorige Zeile gemacht hat.
}
; Andernfalls:
KeepWinZRunning := true
Loop
{
; Die nächsten vier Zeilen seien die Aktionen, die Sie wiederholt haben wollen (passen Sie sie Ihren Wünschen an):
ToolTip, Drücken Sie Win-Z nochmal`, um das Blinken zu beenden.
Sleep 1000
ToolTip
Sleep 1000
; Aber verändern Sie nicht den Rest.
if not KeepWinZRunning ; Durch nochmaligen Drücken von Win-Z signalisiert der Benutzer der Loop zu stoppen.
break ; Schleife verlassen.
}
KeepWinZRunning := false ; Bereitet das nächste Drücken dieses Hotkeys vor.
return

Wie lässt sich bei stark belasteter CPU die Performance für Spiele oder andere Anwendungen verbessern?

Wenn die Hotkeys, Maus-Klicks oder Sends eines Skripts bei stark belasteter CPU merklich langsamer sind als normal, kann die Erhöhung der Prozess-Priorität helfen. Fügen Sie dazu die folgende Zeile am Anfang des Skripts ein:
Process, Priority, , High

Wie lässt sich eine kontextabhängige Hilfe für AutoHotkey-Befehle in jedem Editor benutzen?

Mit diesem Skript von Rajat.

Wie kann man feststellen, wann eine Web-Seite vollständig geladen worden ist?

Die vielleicht sicherste Methode mit dem Internet Explorer ist die Benutzung von DllCall und COM, wie auf http://www.autohotkey.com/forum/topic19256.html gezeigt. In diesem Zusammenhang: Der Inhalt von Adressleiste und Statusleiste kann, wie auf http://www.autohotkey.com/forum/topic19255.html gezeigt, abgerufen werden.

Eine ältere, weniger sichere Methode: Die Technik des folgenden Beispiels funktioniert mit dem Internet Explorer für die meisten Web-Seiten. Eine ähnliche Technik könnte für andere Browser verwendet werden:

Run, www.yahoo.com
MouseMove, 0, 0 ; Vermeidet, daß die Statusleiste einen mouse-hover-Link statt "Fertig" anzeigt.
WinWait, Yahoo! - Microsoft Internet Explorer WinActivate StatusBarWait, Done, 30
if ErrorLevel
MsgBox Wartezeit abgelaufen oder das Fenster wurde geschlossen.
else
MsgBox Die Seite ist geladen.

Wie lassen sich Datum- und Zeitangaben vergleichen oder verändern?

Der EnvAdd-Befehl kann zu einem Zeit-String im YYYYMMDDHH24MISS-Format eine Anzahl von Tagen, Stunden, Minuten oder Sekunden addieren oder subtrahieren. Das folgende Beispiel subtrahiert 7 Tage von der angegebenen Zeit:

EnvAdd, ZeitVariable, -7, days

Unter EnvSub ist ein Beispiel, wie man die Zeitdifferenz zwischen Tagen oder Zeiten bestimmt. Zusätzlich enthält die eingebaute Variable A_Now die aktuelle Ortszeit. Schließlich gibt es einige eingebaute Datum/Zeit-Variablen, wie auch der FormatTime-Befehl, mit denen sich benutzerdefinierte Datum/Zeit-Strings erzeugen lassen.

Warum funktionieren Hotstrings, Send und Maus-Klick in bestimmten Spielen nicht?

Einige Spiele benutzen ausschließlich DirectInput. Ein Nebeneffekt kann sein, dass sie sämtliche simulierten Tastendrücke und Maus-Klicks ignorieren. Um dies zu umgehen, probieren Sie die folgenden Vorschläge aus:

Wie kann man Winamp steuern, auch wenn es nicht aktiv ist?

Siehe Winamp automatisieren.

Wie kann man die Schaltflächen-Namen einer MsgBox ändern?

Hier ist ein Beispiel.

Hotkeys, Hotstrings und Remapping

Wie aktiviere ich meine Hotkeys und Hotstrings automatisch bei jedem PC-Start?

Im Start-Menü / Programme gibt es einen Ordner namens Autostart. Wenn Sie in diesem Ordner eine Verknüpfung zu Ihrem Skript erstellen, wird es bei jedem PC-Start ausgeführt. So erzeugt man eine Verknüpfung:

  1. Im Explorer die Skript-Datei wählen und Strg-C drücken.
  2. Rechts-Klick auf die Schaltfläche "Start" und "Öffnen - Alle Benutzer" wählen.
  3. In den Autostart-Ordner (im Ordner "Programme") wechseln.
  4. Wählen Sie vom Menü Bearbeiten > Verknüpfung einfügen. Die Verknüpfung zum Skript sollte sich nun im Autostart-Ordner befinden.

Ich habe Schwierigkeiten, aus meinen Maustasten Hotkeys zu machen. Gibt's eine Lösung??

Beachten Sie, dass Maus-Hotkeys mit Windows 95/98/Me nicht möglich sind. Auf anderen Betriebssystemen sollten sich die linke und rechte Maustaste normal zuweisen lassen (Beispiel, "#LButton::" ist der Win+LinkeMaustaste - Hotkey). Die mittlere Maustaste und die Drehung des Maus-Rades sollten zuweisbar sein, mit Ausnahme von Mäusen, deren Treiber diese Tasten direkt überwachen.

Die vierte und fünfte Maustaste (XButton1 und XButton2) lassen sich zuweisen, wenn Ihr Maustreiber erlaubt, dass das System die Klicks sieht. Wenn sie nicht sichtbar sind -- oder ihre Maus mehr als fünf Tasten hat, die Sie benutzen wollen -- versuchen Sie, die zur Maus gehörende Software so einzustellen, dass beim Betätigen einer jeden Maustaste ein Tastendruck gesendet wird. Ein solcher Tastendruck kann in einem Skript als Hotkey definiert werden. Wenn z. B. die vierte Maustaste - nach einer entsprechenden Konfiguration - bei jedem Druck Strg+F1 sendet, können Sie diese Taste als Hotkey ^F1:: in einem Skript benutzen.

Wenn bei einer 5-Tasten-Maus die vierte und fünfte Taste nicht sichtbar sind, können Sie versuchen, als Ihren Maustreiber den im Betriebssystem voreingestellten zu verwenden. Dies setz voraus, dass für speziell Ihre Maus ein solcher Treiber existiert und Sie ohne die Features leben können, die Ihre Maus-Software bietet.

Wie lassen sich Tab- oder Space-Taste als Hotkeys definieren?

Benutzen Sie die Namen der Tasten (Tab und Space) statt ihrer Buchstaben. Beispiele: #Space steht für Win+Space und ^!Tab ist Strg+Alt+Tab.

Wie können Tasten oder Maus-Tasten in andere Tasten umbelegt werden?

Dies wird auf der Remapping-Seite beschrieben.

Wie bekommt man einen Hotkey oder Hotstring dazu, nur in bestimmten Programmen zu arbeiten? Mit anderen Worten: ich möchte, dass eine bestimmte Taste so wie immer arbeitet, es sei denn, ein bestimmtes Fenster ist aktiv.

Die bevorzugte Methode ist #IfWinActive. Beispiel:

#IfWinActive, ahk_class Notepad
^a::MsgBox Sie haben bei aktiviertem Notepad Strg-A You gedrückt.

Windows 95/98/Me: Obwohl die oben beschriebene Methode funktioniert, zeigt Strg-A in einem Nicht-Notepad-Fenster keinerlei Wirkung, nicht mal seine ursprüngliche Funktion. Um dies zu umgehen, benutzen Sie:

$^a::Send ^a ; Dieser Hotkey muß unter Windows 9x ganz oben stehen. Das $-Präfix erlaubt dem Hotkey, sich selbst zu senden.
#IfWinActive, ahk_class Notepad
^a::MsgBox Sie haben bei aktiviertem Notepad Strg-A gedrückt.

Wie gibt man einer Einleitungs-Taste (Prefix-Key) ihre ursprüngliche Funktion, statt nichts zu machen?

Mit Einleitung-Taste (prefix-key) ist die Taste gemeint, die bei einem aus mehreren Tasten bestehenden Hotkey gedrückt wird. Siehe folgendes Beispiel, das Numpad0 in eine Präfix-Taste wandelt:

Numpad0 & Numpad1::MsgBox, Sie haben gerade NumPad1 gedrückt, bei schon betätigter Numpad0-Taste.

Damit Numpad0 so funktioniert, als wäre es nie ein Hotkey gewesen, fügen Sie den folgenden Hotkey hinzu:

$Numpad0::Send, {Numpad0}

Mit dem Präfix $ wird einer Warnung vor einer unendlichen Schleife vorgebeugt (weil der Hotkey "sich selbst sendet"). Zusätzlich startet die obige Aktion beim Loslassen der Taste.

Wie lassen sich die eingebauten Windows-Tastenkürzel, wie Win+U (Hilfsprogramm-Manager) und Win+R (Ausführen) ändern oder abschalten?

Hier sind ein paar Beispiele.

Meine Tastatur hat eine spezielle 000-Taste. Kann man sie in einen Hotkey umwandeln?

Man kann, aber nur unter Windows NT, 2000, XP oder darüber. Dieses Beispiel-Skript wandelt die 000-Taste in ein Gleichheitszeichen um. Sie können sie nach Ihren Wünschen ändern, indem Sie die Send, =-Zeile mit Zeilen Ihrer Wahl auswechseln.