2017-03-31 2 views
0

中マウスボタンでシステム全体のドラッグ操作を実装しようとしています。それは、他のプログラムでの中マウスのドラッグ動作を無効にする必要があります。現在、私はシステム全体のフックでグローバルマウスイベントを処理しています。他のアプリケーション(Windows)でマウスイベントを正しく上書きするにはどうすればいいですか?

問題は - 私がそれらを傍受しなかったのと同じように、多くのプログラムが依然として同じイベントを受け取り、処理しています。ここで

は、私が試したものです:

  • マウスダウンイベントのために、次のフックを呼び出していない:私はマウスのアップを受けることはありませんので、私は、いつどこで

  • ないドラッグを停止するのか分かりませんマウス移動の次のフックを呼び出します。カーソルが大きく減速します。

  • マウスの次のフックを呼び出しません。システムのほとんどのウィンドウは、ドラッグが終了した後、マウスイベントに完全に反応します。

  • は、チェーン内の次のフックを常に呼び出します。マウスの下のコントロールにスクロールがあると、ドラッグが進行している間ほとんどスクロールします。またUWPアプリケーションはドラッグ中にマウスイベントを受け取り続けるので、MS Edgeのリンクが開始時にカーソルの下に来ると、マウスがエッジ境界を離れないと、Edgeはクリックイベントを受け取り、新しいタブが開きます

私が必要とするのは、ユーザーが中マウスを持ってドラッグを開始したときに、ドラッグハンドラを呼び出す必要があります。また、ファイルのドラッグ、スクロールなどの他のハンドラは発生しません。

+0

あなたは(* SetCaptureを呼び出す必要があるドラッグを開始)*と* ReleaseCapture()* WHE n最後をドラッグします。フックを設定していません – RbMm

+0

@RbMm実際、私はそれを試みました。問題は、自分のドラッグだけでなく、あらゆるアプリケーションからドラッグを開始する必要があることです。マウスの中央ボタンを使って、そのウィンドウの任意のポイントからシステム内の任意のウィンドウをドラッグして、他の動作を無効にしたい。問題は、たとえば、私がSetCaptureを呼び出した後でも、最初のMouseMoveをマウスの下に置いた後でも、Microsoft Edgeはスクロールしてマウスの動きを処理し続けるということです。 – LOST

答えて

0

は、私はややハック解決策になってしまった:

  • 真ん中のボタンにマウスダウンのために、次のフックを呼び出すことはありません
  • それが押されたレコード
  • ユーザーがなかった場合は、マウスアップを扱いますドラッグ - ダウンリプレイ全マウスアップ+マウス(による再入にデッドロックを回避するために)別のスレッドからSendInputを使用して
関連する問題