Hotstring

スクリプトの実行中に、ホットストリングを作成、変更、有効化、または無効化します。

Hotstring String , Replacement, OnOffToggle
Hotstring NewOptions
Hotstring SubFunction , Value1

パラメータ

String

型:文字列

ホットストリングのトリガー文字列で、その前に通常のコロンオプション文字が入ります。例えば、"::btw"または":*:]d"です。

文字列は、大文字小文字の区別(C)単語の区別(?)、活性化基準(#HotIfまたはHotIfで設定)、トリガー文字列を考慮して、既存のホットストリングと一致させることができます。例えば、"::btw""::BTW"は、デフォルトで大文字小文字を区別するモードが有効になっていなければ一致しますが、":C:btw"":C:BTW"は決して一致しません。The C and ? options may be included in String or set as defaults by the #Hotstring directive or a previous use of NewOptions.

hotstringが既に存在する場合、Stringで指定されたオプションは有効になり、それ以外のオプションはそのままになります。ただし、C?が付いたホットストリングは他のホットストリングと区別して考えるため、これらのオプションを追加したり削除したりすることはできません。代わりに、既存のホットストリングをオフにして、新しいホットストリングを作成します。

Hotstring関数またはスクリプトのダブルコロン構文でホットストリングを最初に作成すると、そのトリガー文字列とオプション文字のシーケンスが、ThisHotkeyに反映されるそのホットストリングの永久的な名前となります。この名前は、後にHotstring関数が異なるオプション文字でHotstringにアクセスしても、変更されることはありません。

Replacement

型:文字列または関数オブジェクト

If omitted and String already exists as a hotstring, its replacement will not be changed. ホットストリングのオプションだけを変更したり、オン/オフを切り替えたりするのに便利です。Otherwise, specify the replacement string or a callback.

If Replacement is a function, it is called (as a new thread) when the hotstring triggers.

コールバックは 1 つのパラメーターを受け取り、次のように定義できます。

MyCallback(HotstringName) { ...

Although the name you give the parameter does not matter, it is assigned the hotstring name.

対応する情報が必要ないときはコールバックのパラメータを省略することができますが、その場合はMyCallback(*)のようにアスタリスクを指定する必要があります。

ダブルコロン構文で定義されたHotstringsは、自動的にパラメータ名ThisHotkeyを使用します。Hotstringは、Hotstringの機能を使わずに、関数名を割り当てることもできます。

After reassigning the function of a hotstring, its original function can only be restored if it was given a name.

注意:このパラメータを指定しても、以前にこの機能を使用したときにホットストリングが無効になっていた場合は、ホットストリングは無効のままとなります。To prevent this, specify "On" for OnOffToggle.

OnOffToggle

型:文字列または整数

以下のいずれかの値:

On または 1 (true):ホットストリングを有効にします。

Off または 0 (false):ホットストリングを無効化します。

Toggle または -1:ホットストリングを反対の状態(有効または無効)に設定します。

NewOptions

型:文字列

その後に作成されるホットストリングに新しいデフォルトオプションを設定するには、Hotstring関数にオプションを先頭や末尾のコロンを付けずに渡します。事例:Hotstring "T"

大文字小文字の区別(C)単語の区別(?)をオンにすると、それ以降にHotstring関数を呼び出したときに、どの既存のホットストリングが見つかるかにも影響します。例えば、Hotstring ":T:btw"はデフォルトで::BTWを検索しますが、Hotstring "C"または#Hotstring Cが有効な場合は検索しません。これは、相互に排他的なオプションを渡すことによって、元に戻したり上書きしたりすることができます。例えば、C0C1Cを上書きします。

SubFunction, Value1

型:文字列

These parameters are dependent upon each other and their usage is described below.

Sub-functions

SubFunctionには以下のいずれかを指定する:

EndChars

ホットストリングレコグナイザーで終端文字として使用される文字のセットを取得または変更します。

OldValue := Hotstring("EndChars" , NewValue)

事例:

prev_chars := Hotstring("EndChars", "-()[]{}':;`"/\,.?!`n`s`t")
MsgBox "The previous value was: " prev_chars

#Hotstring EndCharsも、この設定に影響します。

現在、ホットストリングごとに異なる終了文字のセットを指定することはできません。

MouseReset

マウスクリックでホットストリング認識機能がリセットされるかどうかを制御するグローバル設定を取得または変更します(ここで説明)。

OldValue := Hotstring("MouseReset" , NewValue)

NewValueは、マウスクリックの検出とホットストリング認識器のリセットを有効にする場合は 1 (true)、無効にする場合は 0 (false)を指定します。戻り値は、この関数が呼び出される前に有効であった設定値です。

本機能による変更で正当化される場合は、マウスフックの取り付け、取り外しが可能です。

#Hotstring NoMouse も、この設定に影響し、NewValuefalseを指定することと同じです。

Reset

ホットストリングレコグナイザーを即座にリセットします。

Hotstring "Reset"

つまり、スクリプトは全く新しいホットストリングを待ち始め、以前に入力したものは考慮されなくなります。

エラー

パラメータが不正な場合、またはメモリ確保に失敗した場合は、例外を投げます。

Replacementが省略され、Stringが有効であるが既存のホットストリングと一致しない場合、TargetErrorがスローされます。これは、ホットストリングの存在をテストするために利用することができます。事例:

try
    Hotstring "::btw"
catch TargetError
    MsgBox "The hotstring does not exist or it has no variant for the current HotIf criteria."

備考

現在のHotIf設定は、Hotstring機能が動作するホットストリングのバリアントを決定します。

スクリプトが中断されると、新しく追加/有効になったホットストリングも中断が解除されるまで中断されます(中断セクションで説明したように除外される場合を除きます)。

キーボードマウスのフックは、本機能による変更で正当化される場合、取り付けまたは取り外しが可能です。

この機能は、自分以外のスクリプトのホットストリングを直接有効にしたり無効にしたりすることはできません。

Once a script has at least one hotstring, it becomes persistent, meaning that ExitApp rather than Exit should be used to terminate it.

バリアント(複製)ホットストリング

各定義が異なるHotIf基準、大文字小文字の区別(C vs. C0/C1)、または、単語の区別?)を持つ場合、特定のホットストリングを複数回作成することができます。これらはホットストリング・バリアントと呼ばれています。事例:

HotIfWinActive "ahk_group CarForums"
Hotstring "::btw", "behind the wheel"
HotIfWinActive "Inter-Office Chat"
Hotstring "::btw", "back to work"
HotIfWinActive
Hotstring "::btw", "by the way"

ホットストリングの複数のバリアントが発火の対象となる場合、最も早く作成されたものだけが発火します。

詳しくは、HotIfをご覧ください。

Hotstrings, HotIf, A_ThisHotkey, #MaxThreadsPerHotkey, Suspend, Threads, Thread, Critical, Hotkey function

Hotstring Helperです。ホットストリングのヘビーユーザーであれば、以下のスクリプトが便利かもしれません。Andreas Boruttaが作成したv1スクリプトをベースにしています。Win+H(または任意の他のホットキー)を押すことで、現在選択されているテキストをホットストリングに変換することができます。例えば、ワープロで「by the way」を選択している場合、Win+Hを押すと、その省略形(例:btw)の入力を促し、新しいホットストリングをスクリプトに追加して有効にします。

#h::  ; Win+H hotkey
{
    ; 現在選択されているテキストを取得します。その代わりにクリップボードが使われます。
    ; EditGetSelectedTextは、より多くのエディターで動作するためです。
    ;(すなわちワープロ)。現在のクリップボードの内容を保存して
    ; 後日、復元されます。これはプレーンテキストしか扱えませんが、より良いようです。
    ; 何もしないよりは:
    ClipboardOld := A_Clipboard
    A_Clipboard := "" ; Must start off blank for detection to work.
    Send "^c"
    if !ClipWait(1)  ; ClipWait timed out.
    {
        A_Clipboard := ClipboardOld ; Restore previous contents of clipboard before returning.
        return
    }
    ; CRLFやLFを`nに置き換えて、「send-raw」ホットストリングで使用することができます:
    ; 他の文字も同様です。
    ; rawモードでは問題ありません:
    ClipContent := StrReplace(A_Clipboard, "``", "````")  ;  以下の他の置換と干渉しないように、この置換を最初に行います。
    ClipContent := StrReplace(ClipContent, "`r`n", "``n")
    ClipContent := StrReplace(ClipContent, "`n", "``n")
    ClipContent := StrReplace(ClipContent, "`t", "``t")
    ClipContent := StrReplace(ClipContent, "`;", "```;")
    A_Clipboard := ClipboardOld  ; クリップボードの以前の内容を復元します。
    ShowInputBox(":T:::" ClipContent)
}

ShowInputBox(DefaultValue)
{
    ; 入力ボックスのキャレットを、より使いやすい位置に移動させます:
    SetTimer MoveCaret, 10
    ; 入力ボックスを表示し、デフォルトのホットストリングを提供します:
    IB := InputBox("
    (
    表示された挿入口に略号を入力してください。また、必要に応じて、置換テキストを編集することもできます。

    Example entry: :T:btw::by the way
    )", "New Hotstring",, DefaultValue)
    if IB.Result = "Cancel"  ; ユーザがキャンセルを押した。
        return

    if RegExMatch(IB.Value, "(?P<Label>:.*?:(?P<Abbreviation>.*?))::(?P<Replacement>.*)", &Entered)
    {
        if !Entered.Abbreviation
            MsgText := "You didn't provide an abbreviation"
        else if !Entered.Replacement
            MsgText := "You didn't provide a replacement"
        else
        {
            Hotstring Entered.Label, Entered.Replacement  ; 今すぐHotstringを有効にします。
            FileAppend "`n" IB.Value, A_ScriptFullPath  ; 後で使うためにホットストリングを保存します。
        }
    }
    else
        MsgText := "The hotstring appears to be improperly formatted"

    if IsSet(MsgText)
    {
        Result := MsgBox(MsgText ". Would you like to try again?",, 4)
        if Result = "Yes"
            ShowInputBox(DefaultValue)
    }
    
    MoveCaret()
    {
        WinWait "New Hotstring"
        ; そうでない場合は、入力ボックスの挿入点をユーザーが略語を入力する場所に移動させます。
        Send "{Home}{Right 3}"
        SetTimer , 0
    }
}