2011-08-29 13 views
6

私は2つのボタン、開始と停止を含むVS 2010によって生成された単純なフォームを使用しています。 StartはSetWindowsHookExを使用してWH_MOUSE_LLをトリガし、stopはフックを停止します。 フックがうまく動作し、ダブルクリックでマウスの中ボタンのクリックを "置き換える"ようにしましたが、フォームの最小化/最大化/閉じるボタンをクリックしている唯一の問題は、 "イベントレース"上記のボタンで呼び出されるフックとイベントの間にあります。それは、あなたがそれらのボタンの1つを押すと、アクションを完了する前にしばらくの間「押したまま」続けているという事実を反映しています(フォームが最小化するなど)。 フォームを右クリックしてそれらのアクションの1つを選択すると、フックを止めて前述のボタンの1つを押すとすぐに同じことが起こります。 誰かにこのような動作が発生しましたか?C#低レベルマウスフックとフォームイベント処理

+3

私の最初の本能は、仕事に間違ったツールを使用している可能性が高いということです。Windowsフックを使用する必要がある場合は、多くの状況を考えることができません。おそらく、あなたがこのソリューションを実装するための問題に戻ることができ、代わりにそれについての質問を投稿すれば? –

+1

こんにちは、私が知っている限り、このメソッドに近づく前にかなりの研究をしました。マウスの中ボタンをクリックするとジェネリックマウスがダブルクリックを生成するようにするには、中間クリックを「インターセプト」して同じ2つの左クリックをシミュレートするx、yマウスの場合、私はそれが私のアプリが動作しても動作したい場合。焦点が合っていないか最小化されている(またはシステムトレイで)フックが唯一の方法です。どのように私はより多くのC/C + +のプログラマーです私はちょうどC#を使用したいと思ったので、GUIの作成のシンプルさ。 – Alex

+1

@Alex - あなたの研究は間違った結論を導きます。真ん中のマウスボタンをキャプチャして、ダブルクリックマウスイベントと同じイベントを実行します(本当に単なるクリックイベントです)。それに加えて、すべてのマウスが中マウスのボタンを持っているわけではないので、それに注意してください。 –

答えて

2

これまで私もこれを経験しました。正確な原因はわかりませんが、フォームやウィンドウなどのクライアント領域にマウスが入ったり出たりしたときに発生するイベントをリッスンして、問題を解決しています。これらのイベントを使用してマウスをフックまたはアンフックすると、正常な動作が得られます。