Description
/ 関数で使用されるアプリケーション定義またはライブラリ定義のコールバック関数。 システムは、新しいマウス入力イベントがスレッド入力キューにポストされようとするたびに、この関数を呼び出します。
HOOKPROC 型は、このコールバック関数へのポインターを定義します。 LowLevelMouseProc は、アプリケーション定義またはライブラリ定義関数名のプレースホルダーです。
LowLevelMouseProc は、アプリケーション定義またはライブラリ定義関数名のプレースホルダーです。
LRESULT CALLBACK LowLevelMouseProc(
_In_ int nCode,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
パラメーター
nCode [in]
型: int
フック プロシージャがメッセージの処理方法を決定するために使用するコード。
nCode が 0 未満の場合、フック プロシージャは、それ以上処理せずに CallNextHookEx 関数にメッセージを渡す必要があり、CallNextHookEx によって返される値を返す必要があります。
このパラメーターには、次のいずれかの値を指定できます。
| 価値 | 説明 |
|---|---|
| HC_ACTION 0 | wParam パラメーターと lParam パラメーターには、マウス メッセージに関する情報が含まれています。 |
wParam [in]
型: WPARAM
マウス メッセージの識別子。
このパラメーターには、WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE、WM_MOUSEWHEEL、WM_RBUTTONDOWN、WM_RBUTTONUP、WM_MBUTTONDOWN、WM_MBUTTONUP、WM_XBUTTONDOWN、またはWM_XBUTTONUPのいずれかのメッセージを指定できます。
lParam [in]
型: LPARAM
MSLLHOOKSTRUCT 構造体へのポインター。
返品ポリシー
型: LRESULT
nCode が 0 未満の場合、フック プロシージャは CallNextHookEx によって返される値を返す必要があります。
nCode が 0 以上で、フック プロシージャがメッセージを処理しなかった場合は、CallNextHookEx を呼び出し、返される値を返すように強くお勧めします。それ以外の場合、WH_MOUSE_LLフックがインストールされている他のアプリケーションはフック通知を受け取らず、結果として正しく動作しない可能性があります。
フック プロシージャがメッセージを処理した場合、システムがフック チェーンまたはターゲット ウィンドウ プロシージャの残りの部分にメッセージを渡さないようにするために、0 以外の値を返す可能性があります。
注釈
アプリケーションは、setWindowsHookExA/SetWindowsHookExW 関数の呼び出しで、WH_MOUSE_LLフックの種類とフック プロシージャへのポインターを指定して、フック プロシージャをインストールします。
このフックは、インストールされたスレッドのコンテキストで呼び出されます。 呼び出しは、フックをインストールしたスレッドにメッセージを送信することによって行われます。 したがって、フックをインストールしたスレッドにはメッセージ ループが必要です。
マウス入力は、ローカル のマウス ドライバーまたは mouse_event 関数の呼び出しから取得できます。 入力が mouse_eventの呼び出しから来た場合、入力は "挿入" されました。 ただし、 WH_MOUSE_LL フックは別のプロセスに挿入されません。 代わりに、コンテキストはフックをインストールしたプロセスに戻り、元のコンテキストで呼び出されます。 その後、コンテキストは、イベントを生成したアプリケーションに切り替わります。
フック プロシージャは、次のレジストリ キーの LowLevelHooksTimeout 値で指定されたデータ エントリよりも短い時間でメッセージを処理する必要があります。
HKEY_CURRENT_USER\Control Panel\Desktop
値の単位はミリ秒です。 フック・プロシージャーがタイムアウトした場合、システムはメッセージを次のフックに渡します。 ただし、Windows 7 以降では、フックは呼び出されることなく自動的に削除されます。 フックが削除されたかどうかをアプリケーションが認識する方法はありません。
Windows 10 バージョン 1709 以降 システムで許容される最大タイムアウト値は 1000 ミリ秒 (1 秒) です。 LowLevelHooksTimeout 値が 1000 より大きい値に設定されている場合、システムは既定で 1000 ミリ秒のタイムアウトを使用します。
注
デバッグ フックでは、この種類の低レベルのマウス フックを追跡できません。 アプリケーションで低レベルのフックを使用する必要がある場合は、作業をワーカー スレッドに渡し、すぐに戻る専用スレッドでフックを実行する必要があります。 ほとんどの場合、アプリケーションで低レベルのフックを使用する必要がある場合は、代わりに生の入力を監視する必要があります。 これは、生の入力では、低レベルのフックよりも効果的に、他のスレッドを対象とするマウスメッセージとキーボード メッセージを非同期的に監視できるためです。 生入力の詳細については、「 生入力」を参照してください。