【AutoHotkey】時間差で連続入力するショートカットキー

アイキャッチ画像 時間差で複数のキーを連続入力する

この記事の内容

AutoHotkeyを使って、時間差で複数のキーを連続入力するスクリプトの書き方


この方法を用いれば以下のことが可能になります:

  • ショートカット一発で「↑↑↓↓←→←→BA」的な順番に押されるコマンドが自動で入力できる
  • ショートカット一発で、まるでタイピングしているかのように自動入力できる

お前はもう死んでいる

読みたい場所へジャンプ

書き方

ここでは、例として

[Windowsキー]と[V]を同時押ししたら、「時間差入力」というテキストが出力される

というスクリプトを用いて解説していきます。

時間差入力

AutoHotkeyを開いて以下の通りに記述します。

#v::
Send, {時}
Sleep, 100
Send, {間}
Sleep, 100
Send, {差}
Sleep, 100
Send, {入}
Sleep, 100
Send, {力}
return

順番に解説しますと、

#v
#は修飾キーとしての[Windowsキー]を表していますので、#vは「WindowsキーとVを同時押ししたら」というトリガーとなる条件部分を示しています。

修飾キーとはなんぞ?って人はこちらをチェック

Send, {時}
「時」という文字を出力

Sleep, 100
次の命令が実行されるまでどのくらい待機するかを表しています。単位はミリ秒です。つまりこのスクリプトでは「時」出力後に100ミリ秒(0.1秒)待機する、という感じになっています。

10ミリ秒0.01秒
100ミリ秒0.1秒
100ミリ秒1秒


return
今回のスクリプトのように、複数の命令があるショートカットを作成した際は、終わりにこの「return」を記述します。

待機時間が全て同じ場合のよりカンタンな記述法

今回例として紹介したコードのように、全ての待機時間が同じである場合は、以下のように省略して記述できるとパディさんという方がコメントで教えてくださいました。パディさん、ありがとうございます!!

SetKeyDelay, 100
#v::
Send, {時}
Send, {間}
Send, {差}
Send, {入}
Send, {力}
return

一番最初に[SetKeyDelay, ミリ秒]を記述することで、後に続く全ての[Send, {}]が指定したミリ秒分、遅れて実行される仕組みのようです。

まとめ

今回紹介したスクリプトは簡略化すると以下のような構成になっています。

時間差で連続入力(入力するキー1が通常キーの場合)
入力するキー1 & 入力するキー2::
Send, {出力するキー}
Sleep, 100
Send, {出力するキー}
return

[ トリガーとなるキー1 & トリガーとなるキー2 ]、 [出力するキー]、[100]の部分を自分の好きな値に変更してお使いください。

MEMO

[トリガーとなるキー1]がアルファベットキーや数字キーなどの場合は、[トリガーとなるキー1]と [トリガーとなるキー2]の間に & が入りますのでお忘れなく


「oとpを同時押ししたら」という条件の場合

o & p::

となります

時間差で連続入力(入力するキー1が修飾キーの場合)
入力するキー1入力するキー2::
Send, {出力するキー}
Sleep, 100
Send, {出力するキー}
return
MEMO
[トリガーとなるキー1]が修飾キーの場合は、[トリガーとなるキー1]と [トリガーとなるキー2]の間には何も入りません。修飾キーは [Ctrlキー][Shiftキー][Altキー][Winキー] の4つです


「Windowsキーとvを同時押ししたら」という条件の場合

#v::

となります

「Windowsキーが#?はぁ?( ゚Д゚)」って人は以下の記事をご参照ください

アイキャッチ画像 修飾キー 【AutoHotkey】修飾キーの使い方と使用例


また、使用する際はAutoHotkeyをリロードすることをお忘れなく。これをしないと新しく記述したスクリプトが反映されませんので。

質問などがある際はコメント欄にご記入ください。分かる範囲でお答えします。

それでは、最後まで読んで頂きありがとうございました。

5 COMMENTS

ナポリタン寿司

こんにちは~。前回コメントさせていただいたナポリタン寿司です。

この記事では、何かのキー → 連続入力ですが、その逆の同じキーを2度押し → 別のキー入力ができないか試したらできたので、報告しときます。このコメントを見て、参考になる方がいらっしゃれば幸いです。

【やりたいこと】
Ctrl2回押しでWindows+Vを押したことにする

【なぜ、やりたいのか?】
Clibor(クリップボード履歴ソフト)の呼び出しをWindows+Vにしたのはいいものの、たまにWindows標準のクリップボード履歴を使いたい時があるため。

【実際に書き込んだコード】
;—-Ctrl2回でWindows+V呼び出し—–
Ctrl::
Keywait, Ctrl, U ;1回目のキーが押し上げられるのを待つ
Keywait, Ctrl, D T0.2 ;0.2秒待機。Ctrlが再び押されると成功(0)、押されないと失敗(1)
If (ErrorLevel=1) ;失敗した場合の動作
{
Send,{Ctrl} ;普通にCtrl1回押す
}
else ;成功した場合の動作(Ctrl2回押し)
{
Send, #v ;Windows+Vを押す
}
return

これで、Cliborのクリップボード呼び出し(Ctrl2回)とWindows標準のクリップボード呼び出し(Windows+V)を綺麗に入れ替えることができます。

それでは失礼します。

返信する
ヤマジ イサオ

ナポリタン寿司さん、こんにちは!

if文についてはいずれ記事を書こうと思っていましたが、キー複数回押しで発動するホットキーは考えたことがなかったので、大変勉強になりました!

とても面白くて有益な情報なので、役に立つ人も多いかと思います!!このブログのパソコン版で表示されるサイドバーにナポリタン寿司さんのコメント冒頭部分が表示されるようにしておきました。多くの人の役に立ちますように!

わざわざ、ありがとうございます!!

返信する
パディ

丁寧な解説と美しいレイアウトの記事に感心しました。

ところで今回の解説のキーの時間差ですが、ご存知かも知れませんが同じ時間差であれば以下のような記述方法が便利です。

SetKeyDelay, 100
#v::
Send, {時}
Send, {間}
Send, {差}
Send, {入}
Send, {力}
return

最初に
SetKeyDelay, 100
で、キー出力の時間間隔を設定するという方法です。
自動操作のときにキー出力が速くて問題があるときにはよく使います。

ご参考まで。

返信する
ヤマジ イサオ

パディさん、コメントありがとうございます!

いえ、ご紹介してくださった記述法は知りませんでした!この記事に追記しておきます。
大変、勉強になりましたm(_ _)m

返信する

ナポリタン寿司 へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)