MSDNで少し読んだ後、この動作の説明はWM_LBUTTONDBLCLKページの次のコメントにあると思います。
CS_DBLCLKS
このスタイルのウィンドウのみがメッセージを受信できWM_LBUTTONDBLCLK
ます。メッセージは、ユーザーがシステムのダブルクリック制限時間内にユーザーがマウスの左ボタンを押し、離し、もう一度押すたびに生成されます。
WM_LBUTTONDOWNプログラムがまたはを処理するときにゼロ以外の値を返す場合、WM_LBUTTONUPそれらのメッセージはターゲットウィンドウに送信されません-期待どおりです。ただし、上記の引用に基づく私の推論では、スタイルのあるウィンドウはメッセージを受信していないCS_DBLCLKSため(フックはウィンドウがメッセージを受信できないため)、システムはメッセージを生成する必要があるとは感じません。。WM_LBUTTONDBLCLK
言い換えると、システムは、(a)ウィンドウが前の/メッセージを受信し、(b)そのウィンドウがスタイルを持っているWM_LBUTTONDBLCLK 場合にのみ生成します。フックは条件(a)が満たされないようにするため、生成されることはなく、代わりにメッセージが送信されます。WM_LBUTTONDOWNWM_LBUTTONUPCS_DBLCLKSWM_LBUTTONDBLCLKWM_LBUTTONDOWN
回避策に関しては、完璧な解決策があるとは思えません。メッセージを受信したい理由は、通常のメッセージがダブルクリックの2回目のクリックを表してWM_LBUTTONDBLCLKいるかどうかをフックが認識できるようにするためだと思います。WM_LBUTTONDOWNその場合、Faisalが提案するようにレジストリからダブルクリック時間を読み取り、フックにWM_LBUTTONDOWNメッセージ間の時間を測定させることができますが、不正確な結果が得られる可能性が高くなります(送信されるメッセージ)。あるいは、代わりにWM_LBUTTONDOWN/WM_LBUTTONUPメッセージをフックが所有する非表示のウィンドウ(CS_DBLCLKSスタイルを持つ)にリダイレクトできる方法がある場合、システムは最終的にWM_LBUTTONDBLCLKメッセージを送信して非表示のウィンドウに送信し、そのウィンドウで処理できますWndProc(ただし、フックの経験があまりないため、これが可能かどうかはわかりません)。