ホットストリング

目次

導入と簡単な例

ホットストリングは、主に略語を入力しながら展開する(自動置換)ために使用されますが、任意のスクリプトアクションを起動するためにも使用することができます。この点では、一般的に複数の文字(つまり文字列)で構成されていることを除けば、ホットキーと似ています。

ホットストリングを定義するには、次の例のように、トリガーとなる略語をコロンのペアで囲みます:

::btw::by the way

上記の例では、btwという略語を入力すると、自動的に「by the way」に置き換えられます(ただし、デフォルトではbtwを入力した後に、Space.Enterなどのエンディングキャラクターを入力する必要があります)。

上記の「by way」の例は、入力されたテキストが自動的に消去されて2つ目のコロンの後に指定された文字列に置き換えられるため、自動置き換えホットストリングとして知られています。これに対して、ホットストリングは以下の例のように任意のカスタムアクションを実行するように定義することもできます。ステートメントは、ホットストリングの関数本体の略語の下に記述する必要があることに注意してください:

::btw::
{
    MsgBox 'You typed "btw".'
}

:*:]d::  ; このホットストリングは、以下のステートメントで"]d"を現在の日付と時刻に置き換えます。
{
    Send FormatTime(, "M/d/yyyy h:mm tt")  ; "9/1/2005 3:53 PM"のように表示されます。
}

上記では、中括弧は各ホットストリングの関数本体を定義する役割を果たします。左中括弧は、OTB (One True Brace) スタイルをサポートするために、二重コロンと同じ行に指定することもできます。

上の2つの例は自動置換ホットストリングでないにもかかわらず、入力した略語はデフォルトで消去されます。これは自動バックスペースによって行われますが、b0オプションによって無効にすることができます。

ホットストリングがトリガーされると、ホットストリングの名前がThisHotkeyという最初のパラメータとして渡されます(末尾のコロンを除いたものです)。事例:

:X:btw::MsgBox ThisHotkey  ; メッセージボックスに":X:btw"と表示されます。

一部の例外を除き、組み込み変数A_ThisHotkeyと同様です。パラメータ名は、名前付き関数を使用することで変更することができます。

エンディングキャラクター

アスタリスクオプションが有効でない限り、ホットストリングの後にエンディングキャラクターを入力しないと発動しません。エンディングキャラクターは、当初は以下のような構成になっています:-()[]{}':;"/\,.?!`n`s`t(`nはEnter、`sはSpace、`tはTabです)。この文字セットは、次の例を編集して変更することができます。新しいエンディングキャラクターは、設定した行以降だけでなくすべてのホットストリングに適用されます:

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

以下のようにホットストリング関数を呼び出して、スクリプトの実行中にエンディングキャラクターを変更することができます:

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

Options

ホットストリングのデフォルトの動作は、2つの方法で変更することが可能です:

  1. スクリプトのそのポイントより物理的に下のすべてのホットストリングに影響を与える#Hotstringディレクティブです。次の例では、CとRのオプションを有効にしています:#Hotstring c r
  2. ホットストリングの最初のコロンのペアの間にオプションを挟みます。次の例では、Cと*オプション(大文字と小文字が区別され、「エンディングキャラクターは不要」)をこのホットストリングのみに対して有効にします::c*:j@::john@somedomain.com

以下のリストでは、各オプションについて説明します。上記の方法で複数のオプションを指定するときは、オプションの間にスペースを任意に含めることができます。

*(アスタリスク):ホットストリングのトリガーには、Space.Enterなどのエンディングキャラクターは必要ありません。事例:

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

上の例では、@を入力した瞬間に置換する文字列(jsmith@somedomain.com)を送信します。#Hotstringディレクティブを使用するときは、このオプションをオフに戻すには*0を使用します。

?(クエスチョンマーク):ホットストリングは、他の単語の中にあっても発動します。つまり、直前に入力された文字が英数字である場合、ホットストリングは発動します。例えば、:?:al::airlineがホットストリングである場合、"practical "と入力すると、"practicairline "が出力されます。このオプションをオフに戻すには、?0を使用します。

B0(Bの後に0がつく):自動バックスペースは、入力した略号を消すために行うものではありません。単にBだけをオプションに使用すると、一度オフにしたバックスペースを再びオンにすることができます。また、スクリプトは{bs 5}でBackspaceを5回送信することもできます。同様に、{left 5}を介してを5回送信することもできます。例えば、次のホットストリングは "<em></em>" を生成し、キャレットを5箇所左に移動させます(タグの間に入るようにします):

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

C:大文字小文字を区別します:略語を入力するときは、スクリプトで定義されている大文字と正確に一致する必要があります。C0で大文字小文字の区別をオフに戻す。

C1:型番の大文字と小文字を一致させない。このオプションを使用すると、自動置換ホットストリングの大文字と小文字を区別せず、実際に入力する文字の大文字と小文字を一致させないようにすることができます。大文字小文字を区別するホットストリング(デフォルト)は、略語を全角で入力すると、置換テキストを全角で生成します。最初の文字を大文字で入力すると、置換の最初の文字も大文字になります(文字である場合)。それ以外の方法でケースを打ち込むと、定義通りに交換品が送られます。Hotstringディレクティブを使用する場合、C0を使用してこのオプションをオフに戻すことができ、これによりホットストリングは再び適合するようになります。

Kn:キーディレイです:このオプションはほとんど使用されませんが、オートバックスペースやオートリプレースメントによって生じるキーストローク間の遅延を設定します。nの新しい遅延を指定します。例えば、10 msの遅延がある場合はk10を、遅延がない場合はk-1を指定します。このオプションの正確な動作は、どの送信モードが有効であるかに依存します:

O:自動置換されたホットストリングの末尾文字を、置換が行われる際に省略します。これは、ホットストリングに終端文字を必要とすることで曖昧さをなくしたいけれども、実際には終端文字を画面に表示させたくない場合に有効です。例えば、:o:ar::aristocratがホットストリングである場合、arと入力した後にスペースキーを押すと、末尾にスペースがないaristocratとなり、Backspaceを押すことなく複数形や所有格にすることが可能です。このオプションをオフに戻すには、O0(アルファベットのOの後にゼロが続く)を使用します。

Pn:ホットストリングの優先順位(例:P1)。このめったに使われないオプションは、自動置換ホットストリングには影響しません。

R:つまり、{Enter}をEnterに、^cをCtrl+Cなどに変換せずに、のまま置換テキストを送信します。R0でこのオプションをオフに戻すか、Tで上書きしてください。

注: テキストモードの方が信頼性が高い場合があります。RとTのオプションは相互に排他的です。

S または S0:ホットストリングをサスペンド対象外にする場合は、Sを指定します。S0(Sに数字の0)を指定すると、免除が解除され、ホットストリングが中断できるようになります。デフォルトのオプションとして適用される場合、Sまたは#SuspendExemptのいずれかがホットストリングを免除します。つまり、指令を上書きするには、ホットストリング内でS0を明示的に使用する必要がある。

SI または SP または SE自動置換ホットストリングがキー入力を送信する方法を設定します。これらのオプションは相互に排他的です:同時に1つだけ有効にすることができます。以下、各オプションについて説明します:

上記のオプションを使用しない場合、デフォルトのモードはSendInputです。ただし、SIオプションとは異なり、SendInputが利用できない場合はSendPlayの代わりにSendEventが使用されます。

T:テキストモードを使って、置換テキストを送信します。つまり、{Enter}をEnter、^cをCtrl+Cなどに変換せず、各文字をキーストロークに変換せずに、文字コードで送信します。このオプションは、継続セクションを持つホットストリングに自動的に適用されます。このオプションをオフに戻すにはT0またはR0を使用し、Rでオーバーライドします。

X:実行。ホットストリングは、置換テキストの代わりに、実行する関数コールまたは式を受け付けます。例えば、:X:~mb::MsgBoxとすると、ユーザーが"~mb"と入力したときに、"MsgBox"という単語に自動置換されるのではなく、メッセージボックスが表示されるようになります。これは、関数を呼び出す多数のホットストリングを定義する場合に最も便利で、そうでなければホットストリングごとに3行必要だからです。

このオプションは、Hotstring関数と一緒に使用しないでください。ホットストリングがトリガーされたときに関数を呼び出すようにするには、関数を参照で渡します。

Z:このオプションはほとんど使用されませんが、ホットストリングがトリガーされるたびに、ホットストリング認識装置をリセットします。つまり、スクリプトは全く新しいホットストリングを待ち始め、以前に入力したものは考慮されなくなります。これにより、ホットストリングの不要なトリガーを防ぐことができます。説明のために、次のようなホットストリングを考えてみましょう:

:b0*?:11::
{
    Send "xx"
}

上記にはZオプションがないので、111(3つの連続した1)を入力すると、真ん中の1が最初のトリガーの最後の文字でありながら、2番目のトリガーの最初の文字でもあるため、ホットストリングが2回トリガーされます。b0の前に文字Zを追加することで、ホットストリングを2回発動させるためには、3回ではなく4回1を入力する必要があります。このオプションをオフに戻すには、Z0を使用します。

ロングリプレイスメント

大量の置換テキストを生成するHotstringsは、継続セクションを使用することで、より読みやすく、保守的にすることができます。事例:

::text1::
(
上下の括弧の間のテキストは、文字通りに扱われます。
デフォルトでは、前の行とこの行の間のハードキャリッジリターン(Enter)も保持されます。
    デフォルトでは、この行の左側のインデント(タブ)が保持されます。
)

これらのデフォルトの動作を変更する方法については、続きのセクションを参照してください。また、継続セクションがあると、ホットストリングのデフォルトがテキストモードになります。この特別なデフォルトを上書きする唯一の方法は、継続セクションを持つ各ホットストリングで反対側のオプションを指定することです(例えば、:t0:text1:: or :r:text2::など)。

文脈依存型ホットストリング

#HotIfディレクティブを使用することで、選択したホットストリングをコンテキストセンシティブにすることができます。このようなホットストリングは、アクティブなウィンドウの種類などの条件によって、異なる置換を送信したり、異なるアクションを実行したり、まったく何もしなかったりします。事例:

#HotIf WinActive("ahk_class Notepad")
::btw::This replacement text will appear only in Notepad.
#HotIf
::btw::This replacement text appears in windows other than Notepad.

自動修正

以下のスクリプトは、ホットストリングを使用して、一般的な英語のスペルミス約4700個をその場で修正します。また、Win+Hのホットキーを搭載しているので、より多くの誤字脱字を簡単に追加することができます:

ダウンロード:AutoCorrect.ahk(127 KB)

著者:Jim Biancoloウィキペディアのよくある誤字脱字リスト

備考

現在、置換テキスト内のはサポートされていません。これを回避するためには、このようなホットストリングを自動置換しないようにします。Instead, use the Send function in the body of the hotstring or in combination with the X (execute) option.

To send an extra space or tab after a replacement, include the escape sequence `s or `t at the end of the replacement, e.g. :*:btw::by the way`s.

TextモードやRawモードを使用しない自動置換ホットストリングの場合、{だけ、またはホワイトスペースだけで先行するものを送信するには、2つのブラケットで囲む必要があります。例えば:*:brace::{{}:*:space_brace:: {{}。それ以外の場合は、OTB(One True Brace)スタイルをサポートするホットストリングの機能のためのオープニングブレースと解釈されます。

デフォルトでは、マウスの左ボタンまたは右ボタンをクリックすると、ホットストリング認識機能がリセットされます。つまり、スクリプトは全く新しいホットストリングを待ち始め、以前に入力したものは考慮されなくなります(これが望ましくない場合は、スクリプトのどこかに#Hotstring NoMouseという行を指定してください)。クリックするたびにテキスト挿入点(キャレット)が移動したり、キーボードフォーカスが新しいコントロール/フィールドに設定されるのが普通なので、この「マウスクリックでリセット」動作がデフォルトになっています。このような場合、通常は、以下のようにすることが望ましい:1)ホットストリングがクエスチョンマークオプションを欠いていても発射します。2)マウスをクリックした後に入力したものが、誤って前に入力したものと有効な略語を形成した場合に発射されるのを防止します。

ホットストリングレコグナイザーは、文字が入力されるたびにアクティブなウィンドウをチェックし、以前とは異なるウィンドウがアクティブな場合はリセットされます。アクティブウィンドウが変更され、文字が入力される前に元に戻った場合、変更は検出されません(ただし、他の理由でホットストリング認識装置がリセットされる場合があります)。ホットストリングレコグナイザーをリセットするには、次のようにします。 Hotstring "Reset"

内蔵変数A_EndCharには、直近の自動置換でないホットストリングを起動するために入力した終了文字が格納されます。終端文字が必要ない場合(*オプションのため)、空白となります。A_EndCharは、Send関数を使用するホットストリングや、入力した終端文字によって動作が変化するホットストリングを作成する場合に便利です。終了文字そのものを送信する場合は、SendText A_EndCharを使用します(SendTextを使用するのは、!{}などの文字が通常のSend関数では正しく送信されないためです)。

ホットストリング定義内のシングルコロンは、ダブルコロンデリミタの前でなければエスケープする必要はありませんが、バックスティックおよびその左にスペースまたはタブを持つセミコロンは常にエスケープする必要があります。全リストは「エスケープシーケンス」を参照してください。

送信機能の特殊文字である{Enter}などは自動置換テキストでサポートされていますが(rawオプションが使用されていない場合)、ホットストリングの略語そのものはこれを使用しません。代わりに、Enterには`n、Tabには`t(またはリテラルタブ)を指定します(完全なリストはエスケープシーケンスを参照してください)。例えば、ホットストリング:*:ab`t::は、"ab" の後にタブを入力したときにトリガーされるでしょう。

スペースとタブは、ホットストリング定義内で文字通り扱われます。たとえば、次のようにすると、2つの異なる結果が得られます:::btw::by the way::btw:: by the way

各ホットストリングの略号の長さは40文字以内とします。この長さを超えると、プログラムは警告を発します。一方、送信モードがデフォルトのSendInputの場合、hotstringの置換テキストの長さは約5000文字に制限されています。この制限は、他の送信モードに切り替えるか、ホットストリングの本文でSendPlayまたはSendEventを使用するか、X(実行)オプションと組み合わせることで解除できます。

ホットストリングの定義順は、互いの優先順位を決定します。つまり、入力した内容に複数のホットストリングがマッチした場合、スクリプトで最初にリストされたものだけが有効になります。関連トピック:コンテキストに応じたホットストリング

ホットストリングスを検出する目的で、あなたが行ったバックスペースは考慮されます。ただし、エディター内での移動にPgUpPgDnHomeEndを使用すると、ホットストリングの認識処理がリセットされます。つまり、まったく新しいホットストリングを待つようになるのです。

ホットストリングは、アクティブウィンドウがキーストロークを無視しているときでも入力できる場合があります。つまり、トリガーとなる略語が一度も見えていなくても、ホットストリングは発射されるのです。さらに、Backspaceを押して、直近に入力したキー操作を取り消すこともできます(効果は確認できませんが)。

ホットストリングの関数は、関数に名前が付けられている場合にのみ、スクリプトから明示的に呼び出すことができます。名前付き関数ホットストリングを参照してください。

ホットストリングは監視されず、不可視のInputフックによって入力がブロックされている間はトリガーされない。

デフォルトでは、ホットストリングは、AutoHotkeyスクリプトによって生成されたキーストロークによってトリガーされることはありません。これにより、ホットストリングが何度もトリガーする無限ループの可能性を回避することができます。この動作は、#InputLevelSendLevelで制御することができます。ただし、自動置換ホットストリングは常に送信レベル0を使用するため、フックホットキーやホットストリングがトリガーされることはない。

ホットストリングは、Hotstring関数によって動的に作成することができ、スクリプトの既存のホットストリングを個別に変更、無効化、有効化することも可能です。

InputHook関数は、特定の目的のためにホットストリングよりも柔軟性があります。例えば、アクティブなウィンドウ(ゲームなど)において、キー操作を見えなくすることができます。また、Escなどの非文字の終了キーにも対応しています。

キーボードフックは、ホットストリングを含むすべてのスクリプトで自動的に使用されます。

ホットストリングの動作は、以下の点でホットキーと同じです:

既知の制限:Javaアプリケーションの一部のシステムでは、ホットストリングが、(デッドキーによって)ユーザーがダイアクリティカル文字を入力する能力を妨害する可能性があります。これを回避するために、サスペンドを一時的にオンにすることができます(これはすべてのホットストリングを無効にします)。

名前付き関数ホットストリング

ホットストリングの関数を、ホットストリング自体をトリガーせずに呼び出す必要がある場合、この例のように、ホットストリングのダブルコロンの直後に関数を定義するだけで、1つまたは複数のホットストリングに名前付き関数を割り当てることができます:

; この例は、スクリプトで大文字と小文字の一致を実現する方法の1つも示しています。
:C:BTW::  ; オールキャプスで入力。
:C:Btw::  ; 最初の文字だけ大文字で入力した。
: :btw::  ; 他の組み合わせで入力した。
    case_conform_btw(hs) ; hsには、この関数のトリガーとなったホットストリングの名前が入ります。
    {
        if (hs == ":C:BTW")
            Send "BY THE WAY"
        else if (hs == ":C:Btw")
            Send "By the way"
        else
            Send "by the way"
    }

関数case_conform_btwがスクリプトによって明示的に呼び出されることがある場合、最初のパラメータ(hs)には値を渡さなければならない。

ホットキーもこのように定義することができます。複数のホットキーやホットストリングを重ねて、同じ機能を呼び出すことができます。

ホットストリングと関数名の間には、空白またはコメントのみでなければなりません。

また、関数に名前をつけることで、上のコードのように、関数名がホットストリングを説明するような、ホットストリングの自己文書化を促進します。

また、Hotstring機能を使って、関数や関数オブジェクトをHotstringに割り当てることもできます。

ホットストリングヘルパー

Hotstring関数のページのexampleセクションの最初の例を見てみてください。Hotstringのヘビーユーザーであれば役に立つかもしれません。Win+Hまたは任意の他のホットキー)を押すことで、現在選択されているテキストをホットストリングに変換することができます。例えば、ワープロで "by the way" を選択している場合、 Win+Hを押すと、その省略形(例:btw)の入力を促し、新しいホットストリングをスクリプトに追加して有効にします。