BlockInput

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

BlockInput OnOff
BlockInput SendMouse
BlockInput MouseMove

パラメータ

OnOff

型:文字列または整数

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

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

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

SendMouse

型:文字列

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

Send: The user's keyboard and mouse input is ignored while a SendEvent is in progress (including Send and SendText if SendMode "Event" has been used). これにより、ユーザーのキー入力が模擬キー入力の流れを乱すことを防いでいます。送信終了後、入力は再び有効になります(以前にBlockInput "On"を使用してブロックされていた場合を除く)。

Mouse: The user's keyboard and mouse input is ignored while a Click, MouseMove, MouseClick, or MouseClickDrag is in progress (the traditional SendEvent mode only). これにより、ユーザーのマウスの動きやクリックが、シミュレートされたマウスイベントを乱すことを防ぐことができます。マウス操作が終了すると、入力は再び有効になります(以前にBlockInput "On"を使用してブロックされている場合を除く)。

SendAndMouse: A combination of the above two modes.

Default: Turns off both the Send and the Mouse modes, but does not change the current state of input blocking. 例えば、現在BlockInput "On"が有効な場合、BlockInput "Default"を使用しても、これをオフにすることはできません。

MouseMove

型:文字列

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

MouseMove: The mouse cursor will not move in response to the user's physical movement of the mouse (DirectInput applications are a possible exception). スクリプトがこの機能を初めて使用するとき、マウスフックがインストールされます(まだインストールされていない場合)。マウスフックは、次にサスペンドまたはホットキー機能を使用するまで設置されたままとなり、ホットキーやホットストリングで必要とされない場合は、その時点で削除されます(#Hotstring NoMouseを参照)。

MouseMoveOff: Allows the user to move the mouse cursor.

備考

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がオンの場合でも、ある種のフックホットキーはトリガーすることができます。Examples include MButton (mouse hook) and LWin & Space (keyboard hook with explicit prefix rather than modifiers $#).

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

SendMode, Send, Click, MouseMove, MouseClick, MouseClickDrag

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

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