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