BlockInput

キーボードとマウスを使ってコンピューターと対話するユーザーの能力を無効または有効にします。

BlockInput OnOff
BlockInput SendMouse
BlockInput MouseMove

パラメータ

OnOff

型:文字列または整数

すべてのユーザー入力を無条件でブロックするモードです。以下のいずれかの値を指定します:

On または 1 (true):ユーザーがコンピューターと対話することができない(マウスやキーボードの入力が効果を発揮しない)状態です。

Off または 0 (false):入力が再有効化されます。

SendMouse

型:文字列

このモードは、特定の送信および/またはマウス機能の実行中にのみ、ユーザー入力をブロックします。次のいずれかの単語を指定します:

Send:SendEventSendMode "Event"が使用されている場合はSendSendTextを含む)の実行中は、ユーザーのキーボードとマウス入力は無視されます。これにより、ユーザーのキー入力が模擬キー入力の流れを乱すことを防いでいます。送信終了後、入力は再び有効になります(以前にBlockInput "On"を使用してブロックされていた場合を除く)。

Mouse:ClickMouseMoveMouseClick、または、MouseClickDragの実行中は、ユーザーのキーボードやマウスの入力は無視されます(従来のSendEventモードの場合のみ)。これにより、ユーザーのマウスの動きやクリックが、シミュレートされたマウスイベントを乱すことを防ぐことができます。マウス操作が終了すると、入力は再び有効になります(以前にBlockInput "On"を使用してブロックされている場合を除く)。

SendAndMouse:上記2つのモードを組み合わせたもの。

Default:送信モードとマウスモードの両方をオフにしますが、入力ブロックの現在の状態は変更しません。例えば、現在BlockInput "On"が有効な場合、BlockInput "Default"を使用しても、これをオフにすることはできません。

MouseMove

型:文字列

このモードは、マウスカーソルの移動のみをブロックします。次のいずれかの単語を指定します:

MouseMove:マウスカーソルは、ユーザーのマウスの物理的な動きに反応して動くことはありません(DirectInputアプリケーションは例外となる可能性があります)。スクリプトがこの機能を初めて使用するとき、マウスフックがインストールされます(まだインストールされていない場合)。マウスフックは、次にサスペンドまたはホットキー機能を使用するまで設置されたままとなり、ホットキーやホットストリングで必要とされない場合は、その時点で削除されます(#Hotstring NoMouseを参照)。

MouseMoveOff:マウスカーソルの移動を許可します。

備考

BlockInputの3つのモード(OnOffSendMouseMouseMove)は、それぞれ独立して動作します。例えば、BlockInput "On"は、SendMouseからのワードの1つが有効であっても、BlockInput "Off"が使われるまで、入力をブロックし続けます。他の例として、BlockInput "On"BlockInput "MouseMove"の両方が有効な場合、両方がオフになるまでマウスの移動がブロックされることがあります。

注:UACが有効になっていたり、スクリプトが管理者として実行されていない場合、OnOffSendMouseモードは効果がない場合があります。詳しくは、FAQを参照してください。

BlockInputよりも、SendMode "Input"SendMode "Play"を使用した方が、キー入力やマウスクリックが途切れることなく行える場合があります。これは、BlockInputとは異なり、これらのモードでは送信中にユーザーが入力したものを破棄せず、代わりにそれらのキーストロークをバッファリングして後に送信するためです。BlockInputを避けることで、次の段落で説明するスティッキングキーを回避することもできます。

ユーザーがキーを押しているときにBlockInputがアクティブになると、そのキーが "stuck down"になってしまうことがあります。この例では、BlockInputをオンにする前にキーが解放されるのを待つことで、これを回避することができます:

^!p::
{
    KeyWait "Control"  ; キーが解除されるのを待ちます。  ホットキーのモディファイアごとに1つのKeyWaitを使用します。
    KeyWait "Alt"
    BlockInput true
    ; ...キー操作やマウスクリックを送信する...
    BlockInput false
}

BlockInputが有効な場合、ユーザー入力はブロックされますが、AutoHotkeyはキーストロークやマウスクリックをシミュレートできます。ただし、Ctrl+Alt+Delを押すと、Windows APIの機能により、入力が再有効化されます。

BlockInputがオンの場合でも、ある種のフックホットキーはトリガーすることができます。例えば、MButton(マウスフック)、LWin & Space(キーボードフック、修飾語$#ではなく明示的な接頭語を持つ)などがあります。

スクリプトが終了すると、入力は自動的に再有効化されます。

SendModeSendClickMouseMoveMouseClickMouseClickDrag

BlockInputをONにした状態でF5を送るとメモ帳が開き、時刻や日付を貼り付けることができます。なお、BlockInputは、スクリプトが管理者として実行されている場合にのみ動作する可能性があります。

BlockInput true
Run "notepad"
WinWaitActive "ahk_class Notepad"
Send "{F5}" ; 時刻と日付を貼り付けます。
BlockInput false