A_MenuMaskKey

A_MenuMaskKey is a built-in variable that controls which key is used to mask Win or Alt keyup events.

A_MenuMaskKey can be used to get or set a string representing a vkNNscNNN sequence identifying the virtual key code (NN) and scan code (NNN), in hexadecimal. If blank, masking is disabled.

スクリプトは、キー名vkNNシーケンス、scNNNシーケンスを割り当てることもでき、この場合、一般にキーが送信されるまでVKまたはSCコードのどちらかがゼロのままとされ、その後自動的に決定されます。Assigning "vk00sc000" disables masking and is equivalent to assigning "".

The returned string is always a vkNNscNNN sequence if enabled or blank if disabled, regardless of how it was assigned. すべてのvkNNscNNN配列と、ゼロでないすべてのvkNNまたはscNNN配列が許容されるが、組み合わせによっては、メニューの抑制に失敗することがある。それ以外の無効なキーは、ValueErrorが投げられる。

The default setting is vk11sc01D (the left Ctrl key).

備考

スタートメニューやアクティブウィンドウのメニューバーが予期せぬタイミングで起動しないように、マスクキーが自動送信されます。

この変数を使用すると、マスクキーを副作用の少ないキーに変更することができます。例えば、マイクロソフト社が「unassigned」と表記するvkE8や、「no mapping」(何の機能も持たないキー)という意味で予約されているvkFFなど、一般的に何の効果もない仮想キーコードが良い候補となります。VKがゼロでSCがゼロでないなど、一部の値ではスタートメニューの抑制に失敗することがあります。キーコードは、既存のキーと合わせる必要はありません。

Note: Microsoft can assign an effect to an unassigned key code at any time. 例えば、vk07はかつては未定義で使っても問題ありませんでしたが、Windows 10 1909以降、ゲームバーを開くために予約されるようになりました。

この設定はグローバルであり、スクリプト全体の動作に影響を与えるために一度だけ指定する必要があることを意味します。

ホットキーについてキーボードフックやマウスフックを使ってホットキーを実装した場合、最終的なキー入力はアクティブウィンドウやシステムから見えない場合があります。もし、WinやAltのキーダウンとキーアップだけを検出し、その間にキー入力がなければ、通常はメニューを起動します。これを防ぐために、キーボードやマウスのフックが自動的にマスクキーを送信する場合があります。

フックホットキーを押すと、次のAltまたはWinのキーアップがマスクされるのは、以下の条件をすべて満たしている場合です。

マウスホットキーは、キーボードフックが装着されていない場合、マスクキーを即座に送信する場合があります。

チルダ修飾子を持つホットキーは、キーのネイティブ機能をブロックすることを目的としていないため、マスキングを引き起こすことはありません。Winが他のキーと組み合わせて使用されたことをシステムが検出するため、~#a::のようなホットキーでもメニューは抑制されます。ただし、マウスのホットキーや両Win自身(~LWin::~RWin::)は、スタートメニューを抑制しません。

スタートメニュー(またはアクティブウィンドウのメニューバー)は、任意のキーストロークを送信することで抑制することができます。次の例は、左Winでスタートメニューを起動する機能を無効にし、モディファイアとして使用できるようにしたものです。

~LWin::Send "{Blind}{vkE8}"

送信: SendControlSendと関連するものは、通常の操作の一部として修飾キーを解放することが多い。例えば、ホットキー<#a::SendText Addressは、通常、Addressの内容を送信する前に左Winを離し、送信後に左Winを押し戻す必要があります(他のWinキーの組み合わせが動作し続けるように)。このような場合、WinやAltのキーアップでメニューが起動しないように、マスクキーを送信することがあります。

背景については、このスレッドをご覧ください。

基本的な使い方です。

A_MenuMaskKey := "vkE8"  ; マスキングキーをvkE8などの未割り当てのものに変更します。
#Space::Run A_ScriptDir  ; 追加のCtrlキー操作は発生しません。

この変数によって、LControlの代わりにvkFFが送信される仕組みを詳しく説明します。

A_MenuMaskKey := "vkFF"  ; vkFFはマッピングなしです。
#UseHook
#Space::
!Space::
{
    KeyWait "LWin"
    KeyWait "RWin"
    KeyWait "Alt"
    KeyHistory
}