Hotstring

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

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

Parameter

Zkette

Typ: Zeichenkette

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 #HotIf oder HotIf) 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-Syntax - erhält einen festen Namen, der sich aus der auslösenden Zeichenkette und der Sequenz von Optionszeichen zusammensetzt, widergespiegelt durch ThisHotkey. Dieser Name ändert sich auch dann nicht, wenn die Hotstring-Funktion später mit anderen Optionszeichen auf den Hotstring zugreift.

Ersatz

Typ: Zeichenkette oder Funktionsobjekt

Wenn weggelassen und Zkette bereits als Hotstring existiert, bleibt sein Ersatz unverändert. Dies ist z.B. nützlich, um nur die Optionen des Hotstrings zu ändern oder um den Hotstring ein- oder auszuschalten. Andernfalls geben Sie den Ersatztext oder eine Rückruffunktion an.

Wenn Ersatz eine Funktion ist, wird sie beim Auslösen des Hotstrings aufgerufen (als neuer Thread).

Die Rückruffunktion akzeptiert einen Parameter und kann wie folgt definiert werden:

MeinRückruf(HotstringName) { ...

Es spielt keine Rolle, welchen Namen Sie dem Parameter geben, allerdings wird ihm als Wert der Hotstring-Name zugewiesen.

Der Parameter der Rückruffunktion kann weggelassen werden, wenn die entsprechende Information nicht benötigt wird, aber dann muss ein Sternchen angegeben werden, z.B. MeinRückruf(*).

Hotstrings, die mit der Zweifach-Doppelpunkt-Syntax definiert wurden, verwenden automatisch den Parameternamen ThisHotkey. Es ist auch möglich, Hotstrings einen Funktionsnamen zuzuweisen, ohne die Hotstring-Funktion zu verwenden.

Nach einer Neuzuweisung der Funktion eines Hotstrings kann die ursprüngliche Funktion nur wiederhergestellt werden, wenn ihm ein Name gegeben wurde.

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

Typ: Zeichenkette oder Integer

Einer der folgenden Werte:

On oder 1 (true): Aktiviert den Hotstring.

Off oder 0 (false): Deaktiviert den Hotstring.

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

NeueOptionen

Typ: Zeichenkette

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

Typ: Zeichenkette

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`s`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

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.

Es wird ein TargetError 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 TargetError
    MsgBox "Der Hotstring existiert nicht oder hat keine Varianten mit den aktuellen HotIf-Kriterien."

Bemerkungen

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

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-Varianten (-Duplikate)

Ein bestimmter Hotstring kann mehr als einmal erstellt werden, wenn für jede Definition ein anderes HotIf-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:

HotIfWinActive "ahk_group CarForums"
Hotstring "::btw", "behind the wheel"
HotIfWinActive "Inter-Office Chat"
Hotstring "::btw", "back to work"
HotIfWinActive
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 finden Sie unter HotIf.

Hotstrings, #HotIf, A_ThisHotkey, #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 v1-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 und aktivieren.

#h::  ; Hotkey: WIN+H
{
    ; Ruft den aktuell markierten Text ab. Es wird die Zwischenablage statt
    ; EditGetSelectedText 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 := A_Clipboard
    A_Clipboard := "" ; Muss vorerst leer sein, damit die Erkennung funktioniert.
    Send "^c"
    if !ClipWait(1)  ; ClipWait hat das Zeitlimit überschritten.
    {
        A_Clipboard := ClipboardAlt ; Den vorherigen Inhalt der Zwischenablage vor dem Return wiederherstellen.
        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(A_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, "`;", "```;")
    A_Clipboard := ClipboardAlt  ; Den vorherigen Inhalt der Zwischenablage wiederherstellen.
    ZeigeInputBox(":T:`::" ClipInhalt)
}

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

    Beispieleintrag: :T:bzw`::beziehungsweise
    )", "Neuer Hotstring",, Standardwert)
    if IB.Result = "Cancel"  ; Der Benutzer hat Abbrechen gedrückt.
        return

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

    if IsSet(Mitteilung)
    {
        Ergebnis := MsgBox(Mitteilung ". Möchten Sie es noch einmal versuchen?",, 4)
        if Ergebnis = "Yes"
            ZeigeInputBox(Standardwert)
    }
    
    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 , 0
    }
}