2017-08-23 86 views
-1

みんな。 今、私はC++ mfcでデスクトップウィンドウアプリケーションを開発しています。 私はマウスの移動をデスクトップの背景にダウンイベントを取得したいと思います。 なぜこのアプリが必要なのですか?すべてのウィンドウはすべてのサイズ変更イベントマウス位置に移動する必要があります。 非常に多くのグーグルが集まった後、私は正しい解決策として物を検索しません。 誰かが、グローバルなマウスフックが役に立つと示唆していますが、私はこれをどのように使用するのか本当に分かりません。 これについてあなたの考えは何ですか? 正しい解決策を見つける手助けをしてください。C++ mfcで画面上のマウスイベントを取得する方法

よろしく ファルコン

答えて

0

あなたは窓の低レベルのためのグローバル入力フックAPI SetWindowsHookEx

を探しているあなたは、ここでより多くの情報を見つけることができます:https://msdn.microsoft.com/en-us/library/windows/desktop/ms644990(v=vs.85).aspx

を具体的に、あなたが使用することを探しています次のような "低レベル"のマウスフック:

HHOOK mousehook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProc, NULL, 0); 

このリンクあたりWindowsメッセージキューでこれを使用するには、D:

Why must SetWindowsHookEx be used with a windows message queue

低レベルのフック、WH_KEYBOARD_LLとWH_MOUSE_LLは、他のすべてのフックとは異なります。ターゲットプロセスにDLLを注入する必要はありません。その代わりに、Windowsは独自のプロセス内で直接フックコールバックを呼び出します。その作業を行うには、メッセージループが必要です。 Windowsが主スレッド上でコールバックを行う他のメカニズムはありません。コールバックは、Get/PeekMessage()を呼び出してWindowsを制御するときにのみ発生します。

WH_KEYBOARDのようなグローバルフックは非常に異なります。 DLLが必要で、キーボードメッセージを処理するプロセス内でコールバックが発生します。あなた自身のプログラムにこれを認識させるには、何らかのプロセス間通信が必要です。名前付きパイプは通常の選択です。そうでなければ、もちろん、この注入されたプロセスがメッセージループをポンピングすることを必要とする。それ以外の場合、キーボードメッセージは表示されません。

低レベルのフックを好むので、移動する方がはるかに簡単です。しかし、ポンプを作動させても動作しません。タイムアウトに注意してください。十分な応答が得られない場合、Windowsは予告なしにフックを壊します。

+0

こんにちは、Josh あなたの答えをありがとう。 私はグローバルマウスフックを実装したばかりです。 私を助けることができますか? –

+0

一般的にstackoverflowで、スレッドごとに1つの質問をします(これはこれを行います)。誰かが答えると、答えた印をつけてください。 2番目の質問がある場合は、新しいスレッドを作成します。ありがとう! – Josh

関連する問題