Hotstring() [v1.1.28+]

Erstellt, modifiziert, aktiviert oder deaktiviert einen Hotstring, während das Skript läuft.

Hotstring(Zkette , Ersatz, OnOffToggle)
Hotstring(NeueOptionen)
Hotstring(Unterfunktion , Wert1)

Parameter

Zkette

Eine Zeichenkette, mit der der Hotstring ausgelöst werden soll, inklusive der davor befindlichen üblichen Doppelpunkte und Optionszeichen. Zum Beispiel "::bzw" oder ":*:]d".

Zkette kann einem existierenden Hotstring entsprechen, unter Berücksichtigung der Groß-/Kleinschreibung-Sensitivität (C), Wort-Sensitivität (?), Aktivierungskriterien (gesetzt durch #If, #IfWin oder Hotkey, If) und der auslösenden Zeichenkette. Zum Beispiel stimmen "::bzw" und "::BZW" überein, es sei denn, der Groß-/Kleinschreibung-Sensitivitätsmodus ist als Standardoption festgelegt, während ":C:bzw" und ":C:BZW" nie übereinstimmen. Die Optionen C und ? können in Zkette enthalten sein oder mit der #Hotstring-Direktive oder durch vorherige Verwendung von NeueOptionen als Standardoptionen festgelegt werden.

Wenn der Hotstring bereits existiert, werden alle Optionen, die in Zkette angegeben sind, in Kraft gesetzt, während alle anderen Optionen unverändert bleiben. Da Hotstrings mit C oder ? getrennt von anderen Hotstrings behandelt werden, ist es nicht möglich, diese Optionen hinzuzufügen oder zu entfernen. Deaktivieren Sie stattdessen den existierenden Hotstring und erstellen Sie einen neuen.

Jeder neu erstellte Hotstring - entweder via Hotstring-Funktion oder Zweifach-Doppelpunkt-Label - erhält einen festen Namen, der sich aus der auslösenden Zeichenkette und der Sequenz von Optionszeichen zusammensetzt, widergespiegelt durch A_ThisHotkey. Dieser Name ändert sich auch dann nicht, wenn die Hotstring-Funktion später mit anderen Optionszeichen auf den Hotstring zugreift.

Wenn die X-Option (Execute) in Zkette vorhanden ist (und nicht nur als Standardoption festgelegt wurde), wird der Ersatz-Parameter als Label- oder Funktionsname statt als Ersatztext interpretiert. Diese Option ist wirkungslos, wenn Ersatz ein Objekt ist.

Ersatz

Der Ersatztext, oder ein Label, eine Funktion oder ein Funktionsobjekt, das/die (als neuer Thread) aufgerufen wird, wenn der Hotstring ausgelöst wird.

Standardmäßig werden alle Zeichenketten als Ersatztext behandelt. Um den Namen eines Labels oder einer Funktion anzugeben, fügen Sie die X-Option (Execute) in Zkette ein. Es können sowohl normale Labels als auch Hotkey-/Hotstring-Labels verwendet werden, allerdings müssen alle Doppelpunkte am Ende weggelassen werden. Wenn eine Funktion und ein Label mit demselben Namen existieren, hat das Label Vorrang. Um stattdessen die Funktion zu verwenden, übergeben Sie eine Funktionsreferenz.

Dieser Parameter kann leer gelassen werden, wenn der Hotstring bereits existiert - in diesem Fall bleibt der Ersatz des Hotstrings unverändert. Dies ist z.B. nützlich, um nur die Optionen des Hotstrings zu ändern oder um den Hotstring ein- oder auszuschalten.

Hinweis: Wenn dieser Parameter angegeben ist, aber der Hotstring durch eine frühere Verwendung dieser Funktion deaktiviert wurde, bleibt der Hotstring deaktiviert. Um das zu verhindern, geben Sie "On" für OnOffToggle an.

OnOffToggle

Eine der folgenden Zeichenketten (in Anführungszeichen, wenn sie direkt geschrieben wird):

On: Aktiviert den Hotstring.

Off: Deaktiviert den Hotstring.

Toggle: Schaltet den Hotstring auf den entgegengesetzten Zustand (aktiviert oder deaktiviert).

[v1.1.30+]: Anstelle von On, Off und Toggle können auch die Werte 1 (oder True), 0 (oder False) und -1 verwendet werden.

NeueOptionen

Um neue Standardoptionen für danach erstellte Hotstrings festzulegen, übergeben Sie die Optionen ohne Doppelpunkte am Anfang oder Ende an die Hotstring-Funktion. Zum Beispiel: Hotstring("T").

Das Einschalten der Groß-/Kleinschreibung-Sensitivität (C) oder der Wort-Sensitivität (?) wirkt sich auch darauf aus, welche existierenden Hotstrings von nachträglichen Aufrufen der Hotstring-Funktion gefunden werden. Zum Beispiel wird Hotstring(":T:btw") standardmäßig ::BTW finden, aber nicht, wenn Hotstring("C") oder #Hotstring C wirksam ist. Um das rückgängig zu machen oder zu überschreiben, übergeben Sie eine Option, die die andere Option automatisch ausschließt; C0 und C1 beispielsweise würden C überschreiben.

Unterfunktion, Wert1

Diese Parameter sind voneinander abhängig und können wie folgt verwendet werden.

Unterfunktionen

Geben Sie für Unterfunktion Folgendes an:

EndChars

Ermittelt oder modifiziert einen Satz von Zeichen, die vom Hotstring-Erkenner als Endungszeichen verwendet werden.

AlterWert := Hotstring("EndChars" , NeuerWert)

Zum Beispiel:

vorher_zeichen := Hotstring("EndChars", "-()[]{}':;""/\,.?!`n `t")
MsgBox Der vorherige Wert war: %vorher_zeichen%

#Hotstring EndChars wirkt sich auch auf diese Einstellung aus.

Es ist derzeit nicht möglich, für jeden Hotstring einen anderen Satz von Endungszeichen anzugeben.

MouseReset

Ermittelt oder modifiziert die globale Einstellung, die bestimmt, ob Mausklicks den Hotstring-Erkenner zurücksetzen dürfen, wie hier beschrieben.

AlterWert := Hotstring("MouseReset" , NeuerWert)

NeuerWert sollte 1 (true) sein, um die Erkennung von Mausklicks und das Zurücksetzen des Hotstring-Erkenners zu aktivieren, oder 0 (false), um es zu deaktivieren. Der Rückgabewert ist die Einstellung, welche vor dem Aufruf der Funktion wirksam war.

Der Maus-Hook wird bei dieser Funktion je nach Bedarf automatisch installiert oder entfernt.

#Hotstring NoMouse wirkt sich auch auf diese Einstellung aus und entspricht der Angabe von False für NeuerWert.

Reset [v1.1.28.01+]

Setzt den Hotstring-Erkenner sofort zurück.

Hotstring("Reset")

Mit anderen Worten, das Skript wartet auf einen völlig neuen Hotstring und verwirft alles, was Sie zuvor eingegeben haben.

Fehlerbehandlung

Diese Funktion löst eine Ausnahme aus, wenn die Parameter ungültig sind oder eine Speicherreservierung fehlschlägt. Sie hat keinen Einfluss auf ErrorLevel.

Eine Ausnahme wird auch ausgelöst, wenn Ersatz weggelassen wird und Zkette gültig ist, aber nicht mit einem existierenden Hotstring übereinstimmt. Dies kann verwendet werden, um zu prüfen, ob ein Hotstring existiert. Zum Beispiel:

try
    Hotstring("::bzw")
catch
    MsgBox Der Hotstring existiert nicht oder hat keine Varianten mit den aktuellen IfWin-Kriterien.

Bemerkungen

Die aktuelle IfWin-Einstellung bestimmt die Variante eines Hotstrings, mit der die Hotstring-Funktion arbeiten wird.

Ein bestimmtes Label oder eine bestimmte Funktion kann das Ziel von mehreren Hotstrings sein. Wenn bekannt ist, dass ein Label oder eine Funktion durch einen Hotstring aufgerufen wurde, lässt sich der Hotstring durch Überprüfung der internen Variable A_ThisHotkey ermitteln.

Wenn das Skript suspendiert ist und neue Hotstrings hinzugefügt oder aktiviert werden, werden diese ebenfalls suspendiert, bis die Suspension wieder aufgehoben wird (es sei denn, sie sind davor geschützt, wie im Suspend-Abschnitt beschrieben).

Die Tastatur- und/oder Maus-Hooks werden bei dieser Funktion je nach Bedarf automatisch installiert oder entfernt.

Diese Funktion kann Hotstrings anderer Skripte nicht direkt aktivieren oder deaktivieren.

Sobald ein Skript mindestens einen Hotstring hat, wird es persistent; das heißt, dass ExitApp anstelle von Exit verwendet werden sollte, um dieses Skript zu terminieren. Hotstring-Skripte sind außerdem automatisch #SingleInstance, es sei denn, #SingleInstance Off wurde angegeben.

Hotstring-Varianten (-Duplikate)

Ein bestimmter Hotstring kann mehr als einmal erstellt werden, wenn für jede Definition ein anderes IfWin-Kriterium, eine andere Groß-/Kleinschreibung-Sensitivität (C vs. C0/C1) oder Wort-Sensitivität (?) angegeben wird. Diese werden als Hotstring-Varianten bezeichnet. Zum Beispiel:

Hotkey, IfWinActive, ahk_group CarForums
Hotstring("::btw", "behind the wheel")
Hotkey, IfWinActive, Inter-Office Chat
Hotstring("::btw", "back to work")
Hotkey, IfWinActive
Hotstring("::btw", "by the way")

Wenn mehr als eine Variante eines Hotstrings zum Auslösen geeignet ist, wird nur die zuerst erstellte Variante ausgelöst.

Weitere Informationen zu IfWin finden Sie unter Allgemeine Bemerkungen von #IfWin.

Hotstrings, #IfWinActive/Exist, #MaxThreadsPerHotkey, Suspend, Threads, Thread, Critical

Beispiele

Hotstring Helper. Das folgende Skript könnte nützlich sein, wenn Sie viel mit Hotstrings arbeiten. Es basiert auf dem Skript von Andreas Borutta. Drücken Sie Win+H (oder einen anderen Hotkey Ihrer Wahl), um den aktuell markierten Text zu einem Hotstring zu machen. Wenn Sie z.B. in einem Textverarbeitungsprogramm "beziehungsweise" markieren und Win+H drücken, wird das Skript Sie auffordern, eine Abkürzung für diesen Text einzugeben (z.B. bzw), und dann den neuen Hotstring in das Skript einfügen. Der Hotstring wird aktiviert, ohne dass das Skript neu geladen werden muss.

#h::  ; Hotkey: WIN+H
; Ruft den aktuell markierten Text ab. Es wird die Zwischenablage statt
; "ControlGet Selected" verwendet, 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):
ClipboardAlt := Clipboard
Clipboard := "" ; Muss vorerst leer sein, damit die Erkennung funktioniert.
Send ^c
ClipWait 1
if ErrorLevel  ; ClipWait hat das Zeitlimit überschritten.
    return
; Ersetze CRLF und/oder LF mit `n für einen Hotstring im Raw-Modus:
; Dasselbe wird für jedes andere Zeichen getan,
; das ein Problem im Raw-Modus sein könnte:
ClipInhalt := StrReplace(Clipboard, "``", "````")  ; Zuerst diese Ersetzung, um die darunter nicht zu stören.
ClipInhalt := StrReplace(ClipInhalt, "`r`n", "``n")
ClipInhalt := StrReplace(ClipInhalt, "`n", "``n")
ClipInhalt := StrReplace(ClipInhalt, "`t", "``t")
ClipInhalt := StrReplace(ClipInhalt, "`;", "```;")
Clipboard := ClipboardAlt  ; Den vorherigen Inhalt der Zwischenablage wiederherstellen.
ZeigeInputBox(":T:`::" ClipInhalt)
return

ZeigeInputBox(Standardwert)
{
    ; Den Textcursor des Eingabefensters auf eine benutzerfreundliche Position verschieben:
    SetTimer, VerschiebeTextcursor, 10
    ; Das Eingabefenster mit dem vordefinierten Hotstring anzeigen:
    InputBox, BenutzerEingabe, Neuer Hotstring,
    (
    Fügen Sie Ihre Abkürzung an der Position des Textcursors ein. Bei Bedarf können Sie den Ersatztext noch ändern.

    Beispieleintrag: :R:bzw`::beziehungsweise
    ),,,,,,,, %Standardwert%
    if ErrorLevel  ; Der Benutzer hat Abbrechen gedrückt.
        return

    if RegExMatch(BenutzerEingabe, "O)(?P<Label>:.*?:(?P<Abkuerzung>.*?))::(?P<Ersatztext>.*)", Hotstring)
    {
        if !Hotstring.Abkuerzung
            Mitteilung := "Sie haben keine Abkürzung angegeben"
        else if !Hotstring.Ersatztext
            Mitteilung := "Sie haben keinen Ersatztext angegeben"
        else
        {
            Hotstring(Hotstring.Label, Hotstring.Ersatztext)  ; Aktiviert jetzt den Hotstring.
            FileAppend, `n%BenutzerEingabe%, %A_ScriptFullPath%  ; Speichert den Hotstring für den späteren Gebrauch.
        }
    }
    else
        Mitteilung := "Der Hotstring scheint falsch strukturiert zu sein"

    if Mitteilung
    {
        MsgBox, 4,, %Mitteilung%. Möchten Sie es noch einmal versuchen?
        IfMsgBox, Yes
            ZeigeInputBox(Standardwert)
    }
    return
    
    VerschiebeTextcursor:
    WinWait, Neuer Hotstring
    ; Andernfalls den Textcursor des Eingabefensters auf eine Position verschieben, wo der Benutzer die Abkürzung eintragen kann.
    Send {Home}{Right 3}
    SetTimer,, Off
    return
}