情報科学屋さんを目指す人のメモ(FC2ブログ版)

何かのやり方や、問題の解決方法をどんどんメモするブログ。そんな大学院生の活動「キャッシュ」に誰かがヒットしてくれることを祈って。

ブログ内検索

スポンサーサイト このエントリーを含むはてなブックマーク

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告 | 編集
このエントリーをはてなブックマークに追加 Clip to Evernote

AutoHotkeyにおけるラベルの優先度と3キー同時押しの定義 このエントリーを含むはてなブックマーク

AutoHotkey(Version v1.0.48.05.L61)のホットキーの定義方法だと、どのラベルの内容が実行されるのか迷うときがあります。その優先度についてのまとめです。

後に書いた方が優先される(コンビネーションキー)

次のコンビネーションキー二つから成るコードを実行します。

a & z::msgbox, "a&z"
b & z::msgbox, "b&z"

このときに、「a,b,z」を同時押し(正確にはaとbを押した状態でz)すると、「b&z」と表示され、二つの行を入れ替えて、

b & z::msgbox, "b&z"
a & z::msgbox, "a&z"

としたときは「a&z」が表示されます。 このことから、後ろに書いた方が優先的に実行されると考えられます。

コンビネーションキーが優先される(通常ホットキーラベルとコンビネーションキー)

続いて、「Ctrl+z」と「a+z」のホットキーを定義してみます。

^z::msgbox, "^z"
a & z::msgbox, "a & z"

このときに、「Ctrl,a,z」を同時押し(Ctrlとaを押した状態でz)すると、今度は行を入れ替えたとしても必ず「a & z」と表示されます

このことから、コンビネーションキーに書いたことが優先的に実行されると考えられます。

3キー同時押しのホットキーを定義するときに注意

つまり、たとえばCtrlと無変換を修飾キー(prefix key)として利用し、「Ctrl+k」「無変換+k」、「Ctrl+無変換+k」をそれぞれ別々に独立して制御したい場合、「^k::」と「vk1Dsc07B & k::」を書いて二つ同時押し(「Ctrl+k」と「無変換+k」)、どちらかの中で三つ同時押しの動作を定義することになります。これは、Ctrl、Alt、Shift、Win以外のキーを二つ以上含む三つ同時押しを直接定義する方法がAutoHotkeyには存在しないからです

つまり、「^k::」側に書く方式

^k::
	If GetKeyState("vk1Dsc07B", "P")
		msgbox, "Ctrl+無変換+k"
	Else
		msgbox, "Ctrl+k"
	Return
vk1Dsc07B & k::msgbox, "無変換+k"

と、「vk1Dsc07B & k::」側に書く方式

^k::msgbox, "Ctrl+k"
vk1Dsc07B & k::
	If GetKeyState("Ctrl", "P")
		msgbox, "Ctrl+無変換+k"
	Else
		msgbox, "無変換+k"
	Return

が考えられるのですが、どちらにせよ、3つのキー(Ctrl,無変換,k)を同時押ししたときに実行されるのは「^k::」ではなく「vk1Dsc07B & k::」なのです。つまり、後者が正解で、前者は間違いとなります(前者を実行して三つ同時押しをしても、「無変換+k」が表示されてしまいます)

まとめ

AutoHotkeyには、このような優先順序があるようです。例に挙げたように、特に3キー同時押しを細かく制御しようとする場合には注意が必要です。ちなみに、ここで細かく、と言っているのは、

vk1Dsc07B & k:: Send, {Blind}{Left}

のように、CtrlキーなどのUp/Downを素通ししてしまうことで3キー同時押しを行うことも出来るからです。ただし、これでは制限が非常にきついので、本文中で紹介したような方法が必要になると思います。

3キー同時押しのうまいやり方が本当にこれなのかは分かりません。もっといい3キー同時押し方法があるのかもしれません。ただ、とりあえずこういうことが起こるということに気がついて、実際にはまってしまったのでメモしておきました。落とし穴うめうめ。

Windowsダンプの極意 エラーが発生したら、まずダンプ解析!
Advanced Windows 第5版 上 (マイクロソフト公式解説書)
インサイド Microsoft Windows 第4版〈上〉 (マイクロソフト公式解説書)
APIで学ぶWindows徹底理解

AutoHotkey | コメント:0 | トラックバック:0 | 編集
このエントリーをはてなブックマークに追加 Clip to Evernote

この記事のコメント

コメントの投稿 エントリの新旧に関わらず、極力18時間中に返信します。














この記事のトラックバック

トラックバックURL:
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。