情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

【AutoHotkey】文字をまとめて高速入力する関数InsertTextを作る

AutoHotkey (26) AutoHotkey v2 (3) Windows (485)

AutoHotkeyで複数文字を高速で一括入力するために関数を用意したので、その中身をメモしておきます。

※2023年11月21日、AUtoHotkey v2.0 用のコードを掲載しました。v2.0では、クリップボード周りの利用方法・記法にも若干の変化がありました。

通常のキー入力では遅い

たとえば、「F21+m」で「<br />」を入力するホットキーを作るとします。

このとき、簡単に作るのであれば、次のようにするでしょう。

F21 & m::Send, <br />

しかしこの方法は、キー入力をすべて再現するため、IMEの状態やフォーカスによって事故りやすい方法です。

また、長さやアプリケーションによっては低速に動作することになり、これまた事故の原因になります。

そのため、クリップボードに文字を一度格納し、入力したいところにペーストすることで文字を挿入するのがおすすめです

文字入力の方法:クリップボード経由で挿入する

クリップボード経由で挿入する場合、キー入力は貼り付けのショートカットキーである「Ctrl+V」のみです。事前に現在のクリップボードをバックアップしておき、最後に復元する動作を組み込めば、この一連の動作を表す関数は次のように記述できます。

InsertText(Content) {
	cb_bk = %ClipboardAll%
	Clipboard = %Content%
	Send, ^v
	Sleep, 200
	Clipboard = %cb_bk%
}

ここにSleepが入っているのは、クリップボードの復元のほうがCtrl+Vより先に実行されてしまう場合があるからです。200msは長めなので、もっと短くもできると思います。

利用例

これを利用して先ほどのホットキーを実装するとこうなります。

F21 & m::InsertText("<br />")

これで、かなり高速に、そして無難に動作する文字列挿入関数の出来上がりです。

AutoHotkey v2 用(2023年11月21日追記)

AutoHotkey v2 では、基本的な記法や、クリップボードの扱い方が変更されており、それに合わせてコードを書き換えると、v2用のコードは、次のようになります:

InsertText(Content) {
	cb_bk := ClipboardAll()
	A_Clipboard := Content
	Send "^v"
	Sleep 200
	A_Clipboard := cb_bk
}

コメント(2)

  1. 42nNow4444
    2014年4月6日(日) 09:38

    「AutoHotKey」っと言うソフトのホットストリング機能を利用してTab & aキーを押して「AutoHotKey」の語を表示させていましたが、チョクチョク、キーを押した後で「うちさついつさきたら」と表示されてしまいイラッとしていましたが、サイトのコードをコピーさせてもらい使っています。良いコードを見つけました。

    今後もAutoHotKeyの書き込みがありまように。

  2. ゆういち
    2017年6月12日(月) 13:50

    これはとても便利ですね!
    今までIMEをオフにする関数を事前にいれて実現していましたが、この方がスマートですね!ありがとうございます。

    でも、一つ問題がありまして、文字列の最後に半角スペースをいれたいのですが、反映されません。

    どうしたら改善できるか、よければ教えてもらえないでしょうか?Send,{space}を追加する方法もありますが、これだと結局IMEをオフにする処理を加えないといけないので…

新しいコメントを投稿