Hotstring [v1.1.28+]

Erstellt, bearbeitet, aktiviert oder deaktiviert ein Hotstring, während das Skript läuft.

Hotstring(Zeichenkette , Ersatz, OnOffToggle)
Hotstring(NeueOptionen)
AlterWert := Hotstring("EndChars" , NeuerWert)
AlterWert := Hotstring("MouseReset" , NeuerWert)
Hotstring("Reset")

Parameter

Zeichenkette

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

Zeichenkette kann einem vorhandenen Hotstring entsprechen, unter Berücksichtigung der Groß-/Kleinschreibung-Sensitivität (C), Wort-Sensitivität (?), Aktivierungskriterien (die durch #If, #IfWin oder Hotkey, If gesetzt sind) und der auslösenden Zeichenkette. Sofern der Groß-/Kleinschreibung-Sensitivitätsmodus nicht als Standardoption bestimmt ist, würde "::bzw" beispielsweise mit "::BZW" übereinstimmen, während ":C:bzw" nie mit ":C:BZW" übereinstimmen würde. Die C- und ?-Optionen können in Zeichenkette enthalten sein oder mit der #Hotstring-Direktive oder durch einen vorherigen Aufruf dieser Funktion als Standardoptionen bestimmt werden.

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

Jeder neu erstellte Hotstring -- entweder via Hotstring-Funktion oder Zweifach-Doppelpunkt-Label -- erhält einen fest zugewiesenen Namen, der eine Zeichenkette bestehend aus seinem Auslöser und der Sequenz der Optionszeichen ist und mit A_ThisHotkey abgerufen werden kann. 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 Zeichenkette vorhanden ist (nicht nur als Standardoption gesetzt), wird der Ersatz-Parameter als Label- oder Funktionsname statt als Ersatztext interpretiert. Diese Option hat keinen Effekt, wenn Ersatz ein Objekt ist.

Ersatz

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

Standardmäßig werden alle Zeichenketten als Ersatztext behandelt. Um den Namen eines Labels oder einer Funktion anzugeben, fügt man die X-Option (Execute) in Zeichenkette ein. Es können sowohl normale Labels als auch Hotkey-/Hotstring-Labels verwendet werden, allerdings müssen die nachfolgenden Doppelpunkte weggelassen werden. Wenn eine Funktion und ein Label den gleichen Namen haben, hat das Label Vorrang. Um stattdessen die Funktion zu verwenden, übergibt man eine Funktionsreferenz.

Dieser Parameter kann leer gelassen werden, wenn der Hotstring bereits existiert, dadurch bewirkt man, dass der Ersatz des Hotstrings nicht geändert wird. Diese Vorgehensweise ist sinnvoll, wenn man nur die Optionen des Hotstrings ändern will, oder ihn ein- oder ausschalten will.

Hinweis: Wenn dieser Parameter angegeben ist, und wurde der Hotstring durch diese Funktion zuvor deaktiviert, bleibt der Hotstring deaktiviert. Um das zu verhindern, fügt man das Wort "On" in OnOffToggle ein.

OnOffToggle

Eine der folgenden Zeichenketten (die als direkt geschriebener Text in Anführungszeichen gesetzt sein muss):

On: Aktiviert den Hotstring.

Off: Deaktiviert den Hotstring.

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

[v1.1.30+]: Es ist möglich, die Werte 1 (oder True), 0 (oder False) und -1 anstelle von On, Off bzw. Toggle zu verwenden.

Fehler

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

Eine Ausnahme wird auch ausgelöst, wenn Ersatz weggelassen wird und Zeichenkette gültig ist, aber nicht mit einem existierenden Hotstring übereinstimmt. Dieser Sachverhalt kann genutzt werden, um die Existenz eines Hotstrings zu testen. Zum Beispiel:

try
    Hotstring("::bzw")
catch
    MsgBox Der Hotstring ist nicht vorhanden oder hat keine Varianten für die aktuellen IfWin-Kriterien.

Bemerkungen

Die aktuelle Einstellung von IfWin bestimmt die Variante eines Hotstrings, auf die sich die Hotstring-Funktion beziehen wird.

Ein Label oder eine Funktion kann das Ziel von mehreren Hotstrings sein. Wenn Sie wissen, dass ein Label oder eine Funktion durch einen Hotstring aufgerufen wurde, können Sie auf die interne Variable A_ThisHotkey zurückgreifen, um zu überprüfen, welcher Hotstring das war.

Beim Unterbrechen des Skripts via Suspend werden neu hinzugefügte/aktivierte Hotstrings auch unterbrochen, bis die Suspend-Unterbrechung wieder aufgehoben wird (sofern sie nicht davon ausgenommen werden, 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 von anderen Skripten 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 muss, um dieses Skript beenden zu können. Hotstring-Skripte sind zudem automatisch #SingleInstance (einzeln vorkommend), sofern nicht #SingleInstance, Off verwendet wurde.

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. Auch bekannt als Hotstring-Varianten. 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")

Bei mehreren gleichzeitig aktiven Varianten eines Hotstrings wird nur die zuerst erstellte Variante ausgelöst.

Siehe Bemerkungen zu #IfWin, um mehr über IfWin zu erfahren.

EndChars

AlterWert := Hotstring("EndChars" , NeuerWert)

Ermittelt oder modifiziert einen Satz von Zeichen, die vom Hotstring-Erkenner als Endungszeichen verwendet werden. 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

AlterWert := Hotstring("MouseReset" , NeuerWert)

Ermittelt oder modifiziert die globale Einstellung, die bestimmt, ob Mausklicks den Hotstring-Erkenner zurücksetzen dürfen, wie hier beschrieben. 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, die vor dem Aufruf der Funktion wirksam war.

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

#Hotstring NoMouse wirkt sich auch auf diese Einstellung aus, und ist das gleiche wie, als würde man False für NeuerWert angeben.

Reset [v1.1.28.01+]

Hotstring("Reset")

Setzt sofort den Hotstring-Erkenner zurück. Das heißt, dass das Skript auf einen völlig neuen Hotstring wartet und dass alles, was Sie zuvor eingegeben haben, verworfen wird.

Standardoptionen setzen

Hotstring(NeueOptionen)

Um neue Standardoptionen für danach erstellte Hotstrings zu bestimmen, übergibt man die Optionen ohne Doppelpunkte 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 vorhandenen Hotstrings gefunden werden, wenn man die Hotstring-Funktion aufruft. 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, übergibt man eine Option, die sich gegenseitig ausschließt; C0 und C1 beispielsweise würde C überschreiben.

Siehe auch

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

Beispiele

Beispiel #1: Hotstring Helper

Das folgende Skript könnte nützlich sein, wenn Sie Hotstrings intensiv nutzen. Es basiert auf das Skript von Andreas Borutta. 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. Der Hotstring wird aktiviert, ohne dass das Skript neu geladen werden muss.

#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):
ClipboardAlt := Clipboard
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:
ClipInhalt := StrReplace(Clipboard, "``", "````")  ; Zuerst diese Ersetzung, um die darunter nicht zu stören.
ClipInhalt := StrReplace(ClipInhalt, "`r`n", "``r")  ; `r funktioniert besser als `n in MS Word usw.
ClipInhalt := StrReplace(ClipInhalt, "`n", "``r")
ClipInhalt := StrReplace(ClipInhalt, "`t", "``t")
ClipInhalt := StrReplace(ClipInhalt, "`;", "```;")
Clipboard := ClipboardAlt  ; Stell den vorherigen Inhalt der Zwischenablage wieder her.
ZeigeInputBox(":T:`::" ClipInhalt)
return

ZeigeInputBox(Standardwert)
{
    ; Verschiebe den Textcursor der InputBox auf eine benutzerfreundliche Position:
    SetTimer, VerschiebeTextcursor, 10
    ; Zeige die InputBox mit dem vordefinierten Hotstring:
    InputBox, Benutzereingabe, Neuer Hotstring,
    (
    Fügen Sie Ihre Abkürzung an die 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
    ; Verschiebe den Textcursor der InputBox auf eine Position, wo der Benutzer die Abkürzung eintragen kann.
    Send {Home}{Right 3}
    SetTimer,, Off
    return
}