blechmusikの日記

キー・カスタマイズ・ソフトウェア "DvorakJ" の覚え書きをはじめとして様々なことを書いています。

AutoHotkey (AutoHotkey_L) で [Ctrl] + [Z] を使用すると不具合が生じうる

DvorakJ で [左Ctrl] + [/] のキーを明示的にフックするようにした - blechmusik2の日記のつづきである。
表題の件は、2010/05/05 02:25にkasuga_toruさんが報告してくださった現象である。本家 AutoHotkey と派生版たる AutoHotkey_L の両方とも、[左Ctrl] を押しながら 下段右側にある [/]([?]) を押すと、それにより生成される処理が当該スキャンコードでは捕捉できなくなることがある。例を示しながら説明しよう。
正常に動作する例を以下に示す。sc035 とは、[/]([?]) のスキャンコードだ。この一行からなるスクリプトを、AutoHotkeyAutoHotkey_L で動かすと、問題なく処理される。[/] を単独で打鍵したり、[左Ctrl] + [/] を打鍵すれば、"Z" を表示するダイアログが現れるはずだ。

sc035:: MsgBox, Z

つぎは、正常に動作しない例だ。上記のスクリプトに一行追記したのである。sc135とは、テンキー上の [/] のスキャンコードだ。これを AutoHotkeyAutoHotkey_L で動かして、文字キーの方の[/]を押してみよう。すると、[/] を単独で打鍵したり[右Ctrl] + [/]を打鍵するなら問題が生じないが、[左Ctrl] + [/] を打鍵すると問題が生じる。"Y" が表示されてしまうのだ。

sc035:: MsgBox, Z
sc135:: MsgBox, Y

まとめよう。AutoHotkeyAutoHotkey_L の両方とも、文字キーの[/]が押されたときに、テンキー上の [/]が押されたと間違って判断してしまうことがある。
この問題を解決するには、文字キーの [/] のキーを異なる方法で指定すればよい。仮想キーコードとスキャンコードを同時に設定すればよいのだ。以下の例を参照のこと。

*vkBFsc035:: MsgBox, Z
*sc135:: MsgBox, Y

もしかしたら、この現象は、日本語環境でのみ生じる症状かもしれない。というのも、インターネット上を検索したところ、これが本家 AutoHotkey のフォーラムで報告されていないのだ。