RegisterWindowMessage
特定のウィンドウ メッセージ (に登録されたカスタム メッセージ) が別のアプリケーションによってブロードキャストされたときに、その構成をリロードする必要があるシェル拡張機能があります。
メッセージを傍受するためにいくつかの方法を試しました。
を使用して、Windows エクスプローラーのウィンドウにウィンドウ サブクラス コールバックをインストールします
SetWindowSubclass
。これは Window 7 では機能しますが、Windows 8 では機能しません。明らかDllMain
にメイン スレッドでは呼び出されSetWindowSubclass
ず、別のスレッドからは機能しないためです。これはドキュメントに記載されています:サブクラス化ヘルパー関数を使用して、スレッド間でウィンドウをサブクラス化することはできません
CALLWNDPROC
を使用して のフックをインストールしSetWindowsHookEx
ます。システム全体の速度を落としたくないので、特定のスレッド (エクスプローラーのメイン スレッド) だけにフックをインストールします。これは Windows 8 では機能しますが、Windows 7 では機能しません...これは、間違ったスレッドにフックしているためだと思われますが、よくわかりません。とにかく、このアプローチは過度に邪魔に思えます。メッセージを処理するメッセージのみのウィンドウを作成します。メッセージのみのウィンドウはブロードキャストされたメッセージを受信しないため、これはまったく機能しません。
シェル拡張でウィンドウ メッセージを確実に受信する方法はありますか?
最初はウィンドウ メッセージがシェル拡張機能に通知する最も簡単な方法のように思われましたが、別のメカニズムがより適切であると思われる場合は、提案をお待ちしています。