5


2

C#-ユーザーがウィンドウを移動しているかどうかを判断する

ユーザーがウィンドウを移動しているかどうかを確認し(私のアプリケーションにはインターフェースがありません)、それに応じて応答します。 これを行う最良の方法は何だと思いますか? ユーザーがタイトルバーをクリックしているかどうかを判断できますか? ウィンドウが移動されているかどうかを確認できますか? 次に、ウィンドウが移動されていることがわかった後、ウィンドウのhWndを取得する必要があります。

2 Answer


6


Windows Formsだけでなく_all_ウィンドウの通知を取得するには、SetWindowsHookEx()API関数によって設定されたフックを使用する必要があります。 Windowsがウィンドウに送信するWM_MOVEメッセージを見るには、 `WH_CALLWNDPROC`フックが必要です。

残念ながら、それはグローバルなフックです。 フックコールバックを実装するコードは、すべてのターゲットプロセスに挿入できるようにDLLにパッケージ化する必要があります。 これにより、C#を使用する計画に穴が開いたため、CLRを挿入できません。 DLLはアンマネージコードで記述する必要があります。

このhttp://www.codeproject.com/Articles/18638/Using-Window-Messages-to-Implement-Global-System-H [コードプロジェクト]は、必要な管理されていない注入可能なDLLを含むアプローチを提供します。


4


これは、ウィンドウハンドルでhttp://blogs.msdn.com/vcblog/archive/2007/01/16/spy-internals.aspx[spy]を実行するテクニックです。 開いているすべてのハンドルを調べて、移動メッセージを待つことができます。

EDIT