Hotstrings

Inhaltsverzeichnis

Einführung und einfache Beispiele

Hotstrings werden hauptsächlich verwendet, um Abkürzungen in lange Texte umzuwandeln, während Sie schreiben (Auto-Ersetzen), allerdings gibt es auch die Möglichkeit, vordefinierte Aktionen starten zu lassen. In diesem Fall werden Hotstrings wie Hotkeys behandelt, außer dass sie üblicherweise aus mehr als einem Zeichen bestehen (also eine Zeichenkette).

Um einen Hotstring zu definieren, umschließt man die auslösende Abkürzung mit Doppelpunkt-Paaren. Zum Beispiel:

::bzw::beziehungsweise

Das Beispiel oben bewirkt, dass die Abkürzung bzw automatisch mit "beziehungsweise" ersetzt wird, sobald Sie sie eingeben (allerdings müssen nach dieser Abkürzung standardmäßig ein Endungszeichen wie Leer, . oder Enter erfolgen).

Das "beziehungsweise"-Beispiel oben ist ein sogenannter automatisch-ersetzender Hotstring, weil der eingegebene Text automatisch gelöscht und mit der angegebenen Zeichenkette nach dem zweiten Doppelpunkt-Paar ersetzt wird. Ein Hotstring kann auch definiert werden, um eine beliebige benutzerdefinierte Aktion wie in den folgenden Beispielen durchführen zu lassen. Beachten Sie, dass die Befehle unterhalb des Hotstrings angegeben werden müssen:

::bzw::
MsgBox Sie haben "bzw" eingegeben.
return

:*:]d::  ; Dieser Hotstring ersetzt "]d" mit dem aktuellen Datum- und Zeitwert.
FormatTime, AktuellerZeitstempel,, d.M.yyyy HH:mm  ; z. B. 21.6.2011 15:10
SendInput %AktuellerZeitstempel%
return

Obwohl die beiden Beispiele oben keine automatisch-ersetzende Hotstrings sind, wird auch hier die eingegebene Abkürzung standardmäßig gelöscht. Dieses Löschen erfolgt durch automatisches Backspacing (wiederholendes Löschen des letzten Zeichens), das mit der b0-Option deaktiviert werden kann.

Endungszeichen

Standardmäßig muss am Ende der Abkürzung ein Endungszeichen eingegeben werden, um sie auszulösen, es sei denn, die Sternchen-Option ist wirksam. Als Endungszeichen gelten standardmäßig die folgenden Zeichen: -()[]{}':;"/\,.?!`n `t (`n ist Enter, `t ist Tab, und beachte das Leerzeichen zwischen `n und `t). Dieser vordefinierte Zeichensatz kann mit dem folgenden Beispiel geändert werden; beachten Sie aber, dass die neuen Endungszeichen für alle Hotstrings gesetzt werden, nicht nur für Hotstrings, die danach erfolgen:

#Hotstring EndChars -()[]{}:;'"/\,.?!`n `t

[v1.1.28+]: Die Endungszeichen können geändert werden, während das Skript läuft, indem man die Hotstring-Funktion wie folgt aufruft:

Hotstring("EndChars", "-()[]{}:;")

Optionen

Es gibt zwei Möglichkeiten, wie man das Standardverhalten eines Hotstrings ändern kann:

  1. Die #Hotstring-Direktive, die alle Hotstrings beeinflusst, die sich im Skript physisch darunter befinden. Das folgende Beispiel zeigt, wie man die Optionen C und R aktivieren kann: #Hotstring c r.
  2. Optionen im ersten Doppelpunktpaar des Hotstrings einfügen. Das folgende Beispiel zeigt, wie man die Optionen C und * (Groß-/Kleinschreibung-sensitiv und "ohne Endungszeichen auslösbar") für einen einzelnen Hotstring wirksam machen kann: :c*:j@::john@somedomain.com.

Die folgende Liste beschreibt die einzelnen Optionen. Mehrere Optionen können optional mit Leerzeichen voneinander getrennt werden.

* (Sternchen): Der Hotstring kann ohne Endungszeichen (z. B. Leer, . oder Enter) ausgelöst werden. Zum Beispiel:

:*:j@::jsmith@somedomain.com

Das Beispiel oben hat den Effekt, dass die Abkürzung mit dem angegebenen Text ersetzt wird, sobald Sie das @-Zeichen eingegeben haben. Verwendet man die #Hotstring-Direktive, muss *0 angegeben werden, um diese Option wieder zu deaktivieren.

? (Fragezeichen): Bewirkt, dass der Hotstring immer ausgelöst wird, egal ob er sich in einem anderen Wort befindet oder nicht; das heißt, dass das davor eingegebene Zeichen alphanumerisch sein kann. Zum Beispiel hätte :?:de::Deutschland den Effekt, dass, sobald man "Fahrstunde " eingegeben hat, "FahrstunDeutschland " erzeugt wird. Mit ?0 kann diese Option wieder deaktiviert werden.

B0 (B gefolgt von einer Null): Bewirkt, dass die eingegebene Abkürzung nicht via automatisches Backspacing (wiederholendes Löschen des letzten Zeichens) gelöscht wird. Mit einem einfachen B kann das Backspacing, falls es zuvor deaktiviert war, wieder aktiviert werden. Mit {bs 5}, das 5 Backspace-Tastendrücke sendet, kann ein Skript das Backspacing selbst durchführen. Mit {left 5} können -Tastendrücke gesendet werden. Der folgende Hotstring beispielsweise erzeugt "<em></em>" und verschiebt den Textcursor 5 Stellen nach links (so dass er genau zwischen den Tags liegt):

:*b0:<em>::</em>{left 5}

C: Groß-/Kleinschreibung beachten: Bewirkt, dass der Hotstring nur ausgelöst wird, wenn die Groß- und Kleinschreibung der eingegebenen Abkürzung mit der im Skript definierten Variante übereinstimmt. Mit C0 kann diese Option wieder deaktiviert werden.

C1: Der Hotstring passt sich nicht der eingegebenen Groß- und Kleinschreibung an. Verwenden Sie diese Option, um automatisch-ersetzende Hotstrings unabhängig von Groß- und Kleinschreibung zu machen, und sie daran zu hindern, sich nach der Groß- und Kleinschreibung der eingegebenen Zeichen zu richten. Hotstrings, die Groß- und Kleinschreibung berücksichtigen (die Standardeinstellung), würden ihren Text in Großbuchstaben erzeugen, wenn die eingegebene Abkürzung auch in Großbuchstaben wäre. Würde man den ersten Buchstaben großschreiben, wäre der erste Buchstabe des Ersatztextes auch großgeschrieben (sofern es ein Buchstabe ist). Wenn die Groß- und Kleinschreibung auf irgendeine andere Weise erfolgt, wird der Ersatztext, so wie er definiert wurde, gesendet. Verwendet man die #Hotstring-Direktive, muss C0 angegeben werden, um diese Option wieder zu deaktivieren.

Kn: Tastenverzögerung: Diese selten verwendete Option bestimmt die Verzögerung zwischen den Tastatureingaben, die via Auto-Backspacing oder Auto-Ersetzen erzeugt werden. Geben Sie für n die neue Verzögerung an; zum Beispiel kann k10 angegeben werden, um eine Verzögerung von 10 ms zu bewirken, und k-1, um die Verzögerung zu deaktivieren. Das genaue Verhalten dieser Option hängt davon ab, welcher Sendemodus aktiv ist:

O: Verhindert, dass beim Erstellen des Ersatztextes das Endungszeichen von automatisch-ersetzenden Hotstrings enthalten ist. Diese Option ist nützlich, wenn ein Hotstring weiterhin via Endungszeichen ausgelöst werden soll, ohne dass dieses Endungszeichen tatsächlich auf dem Bildschirm zu sehen ist. Zum Beispiel hätte :o:ar::Aristokrat den Effekt, dass, sobald man "ar" gefolgt von einem Leerzeichen eingegeben hat, "Aristokrat" ohne nachfolgendem Leerzeichen erzeugen wird, dadurch kann das Wort in den Plural oder Kasus gesetzt werden, ohne Backspace verwenden zu müssen. Mit O0 (Buchstabe O gefolgt von einer Null) kann diese Option wieder deaktiviert werden.

Pn: Die Priorität des Hotstrings (z. B. P1). Diese selten verwendete Option funktioniert nicht bei automatisch-ersetzenden Hotstrings.

R: Bewirkt, dass der Ersatztext im Rohzustand gesendet wird; das heißt, dass keine Umwandlung von {Enter} zu Enter, ^c zu Strg+C und so weiter erfolgt. Diese Option tritt bei Hotstrings, die einen Fortsetzungsbereich haben, automatisch in Kraft. Mit R0 kann diese Option wieder deaktiviert werden.

Hinweis: Der Text-Modus ist eventuell zuverlässiger. Die Optionen R und T schließen sich gegenseitig aus.

SI oder SP oder SE [v1.0.43+]: Bestimmt den Modus, mit dem die automatisch-ersetzenden Hotstrings ihre Tastatureingaben senden sollen. Diese Optionen schließen sich gegenseitig aus; das heißt, dass nur eine Option zur selben Zeit aktiv sein kann. Die folgende Liste beschreibt die einzelnen Optionen:

In [v1.0.43+] ist SendInput der Standardmodus, der mit den oben genannten Optionen überschrieben werden kann. Beachten Sie aber, dass im Gegensatz zur SI-Option SendEvent statt SendPlay verwendet wird, falls SendInput nicht zur Verfügung steht.

T [v1.1.27+]: Sendet den Ersatztext im Rohzustand, ohne die Zeichen in Tastendrücke umzuwandeln. Weitere Informationen finden Sie unter Text-Modus. Diese Option kann mit T0 oder R0 deaktiviert oder mit R überschrieben werden.

X [v1.1.28+]: Execute (Ausführen). Anstelle eines Ersatztextes akzeptiert der Hotstring einen Befehl oder Ausdruck, den er ausführen kann. :X:~mb::MsgBox beispielsweise würde bewirken, dass ein Mitteilungsfenster angezeigt wird, wenn der Benutzer "~mb" schreibt, anstatt den Text mit dem Wort "MsgBox" automatisch zu ersetzen. Das ist besonders nützlich, wenn man eine große Anzahl von Hotstrings definiert, die Funktionen aufrufen, da sonst drei Zeilen pro Hotstring notwendig wären.

Wenn die X-Option in Verbindung mit der Hotstring-Funktion genutzt wird, bewirkt sie, dass der Ersatz-Parameter als Label- oder Funktionsname statt als Ersatztext interpretiert wird. Allerdings hat die X-Option diesen Effekt nur, wenn sie bei jedem Aufruf der Funktion angegeben ist.

Z: Diese selten verwendete Option setzt die Hotstring-Erkennung jedes Mal zurück, wenn der Hotstring ausgelöst wird. Das heißt, dass das Skript auf einen völlig neuen Hotstring wartet und dass alles, was Sie zuvor eingegeben haben, verworfen wird. Dadurch wird verhindert, dass Hotstrings unbeabsichtigt ausgelöst werden können. Schauen Sie sich dazu das folgende Beispiel an:

:b0*?:11::
SendInput xx
return

Wenn Sie mit diesem Beispiel drei aufeinanderfolgende Einsen (111) schreiben, wird der Hotstring zweimal ausgelöst, weil die mittlere 1 sowohl das letzte Zeichen vom ersten Auslösen als auch das erste Zeichen vom zweiten Auslösen ist. Sobald Sie den Buchstaben Z vor b0 einfügen, müssten Sie vier statt drei Einsen eingeben, um den Hotstring zweimal auslösen zu können. Mit Z0 kann diese Option wieder deaktiviert werden.

Lange Ersatztexte

Hotstrings, die lange Ersatztexte erzeugen, können durch Fortsetzungsbereiche besser lesbar und verwaltbar gemacht werden. Zum Beispiel:

::text1::
(
Der gesamte Text zwischen der oberen und unteren Klammer wird als direkt geschriebener Text behandelt, einschließlich Kommas und Prozentzeichen.
Standardmäßig bleibt das CR-Zeilenumbruchszeichen (Enter) zwischen der vorherigen und dieser Zeile erhalten.
    Standardmäßig bleibt die Einrückung (Tabulator) auf der linken Seite dieser Zeile erhalten.

Siehe Fortsetzungsbereich, wie diese Standardverhalten geändert werden können.
)

Ein Fortsetzungsbereich führt außerdem dazu, dass der Hotstring standardmäßig den Raw-Modus verwendet. Dieses Sonderverhalten kann nur überschrieben werden, wenn bei jedem Hotstring, der ein Fortsetzungsbereich hat, die r0-Option angegeben wird (z. B. :r0:text1::).

Kontextabhängige Hotstrings

Mit den Direktiven #IfWinActive/Exist können bestimmte Hotstrings kontextabhängig gemacht werden. Solche Hotstrings werden je nach Typ des aktiven oder vorhandenen Fensters unterschiedliche Ersatztexte senden, andere Aktionen ausführen oder überhaupt nichts tun. Zum Beispiel:

#IfWinActive ahk_class Notepad
::bzw::Dieser Ersatztext wird nur im Texteditor erscheinen.
#IfWinActive
::bzw::Dieser Ersatztext erscheint nur in einem Fenster, das nicht der Texteditor ist.

AutoCorrect

Das folgende Skript zeigt, wie Hotstrings zum Korrigieren von ca. 4700 häufig vorkommenden englischen Rechtschreibfehlern benutzt werden können. Mit dem Hotkey Win+H können weitere Rechtschreibfehler hinzugefügt werden:

Download: AutoCorrect.ahk (127 KB)

Autor: Jim Biancolo und Wikipedia's Lists of Common Misspellings

Bemerkungen

Aktuell werden innerhalb des Ersatztextes keine Variablenreferenzen wie %MeineVar% unterstützt. Um das zu umgehen, dürfen keine automatisch-ersetzende Hotstrings benutzt werden. Schreiben Sie stattdessen einen SendInput-Befehl unter der Abkürzung, gefolgt von einer Zeile, die nur das Wort Return enthält.

Leer- oder Tabulatorzeichen am Ende des Ersatztextes werden standardmäßig verworfen. Damit sie trotzdem gesendet werden, muss ein weiteres Zeichen, ein umgekehrtes Häkchen (`), hinzugefügt werden. Zum Beispiel:

:*:bzw::beziehungsweise `

Standardmäßig wird ein linker oder rechter Mausklick die Hotstring-Erkennung zurücksetzen. Das heißt, dass das Skript auf einen völlig neuen Hotstring warten und dass alles, was Sie zuvor eingegeben haben, verworfen wird (wenn das unerwünscht ist, muss die Zeile #Hotstring NoMouse irgendwo im Skript eingefügt werden). Dieses "Zurücksetzen bei einem Mausklick" ist standardmäßig so festgelegt, weil jeder Klick üblicherweise den Textcursor verschiebt oder den Tastaturfokus auf ein neues Steuerelement/Feld setzt. In solchen Fällen ist es generell wünschenswert: 1) einen Hotstring auch dann auslösen zu können, wenn die Fragezeichen-Option fehlt; 2) einen Hotstring am Auslösen zu hindern, wenn Sie nach einem Mausklick etwas eingeben, das zufällig eine gültige Abkürzung aus der vorherigen Eingabe formt.

Der Hotstring-Erkenner überprüft jedes Mal das aktive Fenster, wenn ein Zeichen eingegeben wird, und setzt sich zurück, wenn ein anderes Fenster als zuvor aktiv ist. Wenn sich das aktive Fenster ändert, aber zurückgesetzt wird, bevor Zeichen eingegeben werden, wird die Änderung nicht erkannt (aber der Hotstring-Erkenner könnte aus einem anderen Grund zurückgesetzt werden). Man kann den Hotstring-Erkenner auch durch Aufrufen von Hotstring("Reset") zurücksetzen.

Die interne Variable A_EndChar enthält das Endungszeichen, mit dem Sie zuletzt einen nicht-automatisch-ersetzenden Hotstring ausgelöst haben. Wenn ein Hotstring nicht mit einem Endungszeichen ausgelöst werden musste (wegen der *-Option), wird die Variable leer sein. A_EndChar ist nützlich, wenn Sie Hotstrings haben, die den Send-Befehl verwenden oder sich je nach Endungszeichen unterschiedlich verhalten sollen. Mit SendRaw %A_EndChar% kann das Endungszeichen selbst gesendet werden (in diesem Fall SendRaw, um zu verhindern, dass Zeichen wie !{}, die eine besondere Bedeutung haben, interpretiert werden).

Innerhalb von Hotstring-Definitionen müssen nur umgekehrte Häkchen und Semikolons, die auf der linken Seite ein Leer- oder Tabulatorzeichen haben, mit einem Escapezeichen versehen werden. Alle anderen Zeichen wie Kommas, Prozentzeichen und einzelne Doppelpunkte können ohne Escapezeichen angegeben werden. Unter Escapesequenzen finden Sie eine komplette Liste.

Die Sonderzeichen des Send-Befehls wie {Enter} werden nur in den Ersatztexten von automatisch-ersetzenden Hotstrings unterstützt (sofern die Raw-Option nicht verwendet wird), nicht in den Hotstring-Abkürzungen selbst. Stattdessen kann `n für Enter und `t (oder ein direkt geschriebenes Tabulatorzeichen) für Tab angegeben werden (unter Escapesequenzen finden Sie eine komplette Liste). Der Hotstring :*:ab`t:: kann beispielsweise ausgelöst werden, wenn Sie "ab" und danach ein Tabulatorzeichen eingeben.

Leer- und Tabulatorzeichen werden innerhalb von Hotstring-Definitionen als direkt geschriebener Text behandelt. Zum Beispiel würden die folgenden Hotstrings zwei unterschiedliche Ergebnisse erzeugen: ::bzw::beziehungsweise und ::bzw:: :beziehungsweise.

Jede Hotstring-Abkürzung hat eine maximale Länge von 40 Zeichen. Das Programm wird Sie warnen, wenn diese Länge überschritten wurde. Die Länge des Ersatztextes ist hingegen auf ca. 5000 Zeichen begrenzt, sofern der Sendemodus standardmäßig SendInput ist. Mit jedem anderen Sendemodus kann dieses Limit auf 16383 Zeichen erhöht werden. Wenn so etwas wie SendPlay %MeineVar% in der Hotstring-Definition angegeben ist, können sogar unendlich viele Zeichen gesendet werden.

Die Reihenfolge, in der die Hotstrings definiert werden, bestimmt ihre relative Priorität zueinander. Das heißt, wenn Ihre Eingabe mehr als einen Hotstring auslösen kann, wird nur der erste im Skript aufgelistete Hotstring in Kraft treten. Verwandtes Thema: Kontextabhängige Hotstrings.

Jedes von Ihnen durchgeführte Backspacing wird bei der Erkennung von Hotstrings berücksichtigt. Die Navigationstasten , , , , Bild↑, Bild↓, Pos1 und Ende bewirken, dass der Hotstring-Erkennungsprozess zurückgesetzt wird. Das heißt, dass der Erkennungsprozess auf einen völlig neuen Hotstring warten wird.

Ein Hotstring kann auch ausgelöst werden, wenn das aktive Fenster Ihre Tastatureingaben ignoriert. Sprich, der Hotstring kann ausgelöst werden, ohne dass die Abkürzung sichtbar sein muss. Auch hier kann die Backspace-Taste gedrückt werden, um die aktuellste Tastatureingabe rückgängig zu machen (selbst wenn Sie den Effekt nicht sehen werden).

Es ist möglich, ein Hotstring-Label als Ziel für Gosub oder Goto zu definieren. Um das zu erreichen, muss das erste Doppelpunkt-Paar (einschließlich die Optionssymbole) und die Abkürzung angegeben werden. Zum Beispiel: Gosub ::xyz. Wenn das Ziel allerdings ein einzeiliger (automatisch-ersetzender) Hotstring ist, wird nichts anderes als ein return ausgeführt.

Hotstrings werden während eines unsichtbaren Input-Befehls weder überwacht noch ausgelöst, aber sie können durch sichtbare Inputs ausgelöst werden.

Standardmäßig können Hotstrings nicht durch Tastatureingaben ausgelöst werden, die ein AutoHotkey-Skript erzeugt hat. Dadurch entfällt die Möglichkeit einer Endlosschleife, in der Hotstrings sich gegenseitig immer und immer wieder auslösen werden. In [v1.1.06+] kann dieses Verhalten mit #InputLevel und SendLevel kontrolliert werden. Beachten Sie aber, dass automatisch-ersetzende Hotstrings immer eine Sendestufe von 0 haben und deshalb nie Hook-Hotkeys oder Hotstrings auslösen können.

[v1.1.28+]: Hotstrings können mithilfe der Hotstring-Funktion dynamisch erstellt werden. Diese Funktion kann zudem im Skript vorhandene Hotstrings einzeln modifizieren, deaktivieren oder aktivieren.

In bestimmten Fällen ist der Input-Befehl flexibler als Hotstrings. Zum Beispiel bietet dieser Befehl die Möglichkeit, unsichtbare Tastatureingaben im aktiven Fenster (z. B. eines Spiels) zu machen. Zudem unterstützt dieser Befehl zeichenlose Endungstasten wie Escape.

Jedes Skript, das Hotstrings enthält, benutzt automatisch den Tastatur-Hook.

Hotstrings verhalten sich in einigen Punkten genauso wie Hotkeys:

Bekannte Einschränkung: Auf einigen Systemen kann es vorkommen, dass der Benutzer keine diakritischen Buchstaben (via toter Tasten) eingeben kann, wenn Hotstrings in Verbindung mit Java-Anwendungen benutzt werden. Um das zu umgehen, kann Suspend vorübergehend aktiviert werden (dieser Befehl deaktiviert alle Hotstrings).

Funktions-Hotstrings [v1.1.28+]

Es ist möglich, einem oder mehreren Hotstrings eine Funktion zuzuweisen, indem man sie einfach unterhalb des Hotkey-Labels definiert. Zum Beispiel:

; Dieses Beispiel zeigt zudem eine Möglichkeit, wie man die Konformität der Groß- und Kleinschreibung in einem Skript gewährleisten kann.
:C:BZW::  ; Alles großgeschrieben.
:C:Bzw::  ; Nur den ersten Buchstaben großgeschrieben.
: :bzw::  ; In einer beliebig anderen Kombination geschrieben.
    bzw_an_schreibung_anpassen() {
        hs := A_ThisHotkey  ; Für den praktischen Grund und falls wir unterbrochen werden.
        if (hs == ":C:BZW")
            Send BEZIEHUNGSWEISE
        else if (hs == ":C:Bzw")
            Send Beziehungsweise
        else
            Send beziehungsweise
    }

Zusätzliche Informationen finden Sie unter Funktions-Hotkeys.

Die Hotstring-Funktion kann auch genutzt werden, um einem Hotstring eine Funktion oder ein Funktionsobjekt zuzuweisen.

Hotstring Helper

Andreas Borutta hat das folgende Skript für Benutzer erstellt, die Hotstrings intensiv nutzen wollen. Drücken Sie Win+H (oder einen anderen Hotkey Ihrer Wahl), um den aktuell markierten Text in einen Hotstring umzuwandeln. Wenn Sie in einem Textverarbeitungsprogramm zum Beispiel "beziehungsweise" markieren und Win+H drücken, wird das Skript Sie auffordern, eine Abkürzung für diesen Text zu bestimmen (z. B. bzw), und dann den neuen Hotstring in das Skript einfügen. Danach wird das Skript neu geladen, um den Hotstring zu aktivieren.

Hinweis: Mit der Hotstring-Funktion können neue Hotstrings erstellt werden, ohne das Skript erneut laden zu müssen. Werfen Sie einen Blick auf das erste Beispiel im Beispielabschnitt der Funktionsseite, um zu sehen, wie das aussehen könnte.

#h::  ; Hotkey: WIN+H
; Ermittelt den aktuell markierten Text. Es wird die Zwischenablage statt
; "ControlGet Selected" benutzt, um das Skript für mehr Texteditoren
; funktionsfähig zu machen. Speichert die aktuelle Zwischenablage und
; stellt sie später wieder her (allerdings funktioniert das nur mit
; reinem Text):
AutoTrim Off  ; Verhindert, dass Leerraumzeichen am Anfang oder Ende der Zwischenablage entfernt werden.
ClipboardAlt = %ClipboardAll%
Clipboard =  ; Muss anfangs leer sein, damit die Erkennung funktioniert.
Send ^c
ClipWait 1
if ErrorLevel  ; ClipWait hat die Zeit überschritten.
    return
; Ersetze CRLF und/oder LF mit `n für einen Hotstring im Raw-Modus:
; Das gleiche wird für jedes andere Zeichen getan,
; das ein Problem im Raw-Modus sein könnte:
StringReplace, Hotstring, Clipboard, ``, ````, All  ; Zuerst diese Ersetzung, um die darunter nicht zu stören.
StringReplace, Hotstring, Hotstring, `r`n, ``r, All  ; `r funktioniert besser als `n in MS Word usw.
StringReplace, Hotstring, Hotstring, `n, ``r, All
StringReplace, Hotstring, Hotstring, %A_Tab%, ``t, All
StringReplace, Hotstring, Hotstring, `;, ```;, All
Clipboard = %ClipboardAlt%  ; Stell den vorherigen Inhalt der Zwischenablage wieder her.
; Verschiebe den Textcursor der InputBox auf eine benutzerfreundliche Position:
SetTimer, VerschiebeTextcursor, 10
; Zeige die InputBox mit dem vordefinierten Hotstring:
InputBox, Hotstring, Neuer Hotstring, Fügen Sie Ihre Abkürzung an die Position des Textcursors ein. Bei Bedarf können Sie den Ersatztext noch ändern.`n`nBeispieleintrag: :R:bzw`::beziehungsweise,,,,,,,, :R:`::%Hotstring%
if ErrorLevel  ; Der Benutzer hat Abbrechen gedrückt.
    return
IfInString, Hotstring, :R`:::
{
    MsgBox Sie haben keine Abkürzung angegeben. Der Hotstring wurde nicht hinzugefügt.
    return
}
; Füge ansonsten den Hotstring hinzu und lade das Skript neu:
FileAppend, `n%Hotstring%, %A_ScriptFullPath%  ; Setze ein `n davor, falls die Datei keine leere Zeile am Ende hat.
Reload
Sleep 200 ; Das Reload schließt bei Erfolg diese Instanz während der Sleep-Phase und verhindert, dass nachfolgende Zeilen erreicht werden.
MsgBox, 4,, Der gerade eingefügte Hotstring scheint fehlerhaft zu sein.  Wollen Sie das Skript öffnen und manuell bearbeiten? Den fehlerhaften Hotstring finden Sie ganz unten im Skript.
IfMsgBox, Yes, Edit
return

VerschiebeTextcursor:
IfWinNotActive, Neuer Hotstring
    return
; Verschiebe den Textcursor der InputBox auf eine Position, wo der Benutzer die Abkürzung eintragen kann.
Send {Home}{Right 3}
SetTimer, VerschiebeTextcursor, Off
return