[このコードは、Inspector.Activateイベント ハンドラー内から呼び出されます (最初の呼び出し)。つまり、インスペクター ウィンドウが実際に表示される直前です。]
Inspector「ネイティブ」なメール インスペクターの場合は、インターフェイスをQI して、そのメソッドIOleWindowを呼び出すだけです。GetWindowただし、これは、実際には特別なツールバーを備えた Word のインスタンスであり、実装していない Word インスペクタでは機能しませんIOleWindow。
(一時的に)Inspector.Caption一意の値に設定してから、そのキャプションを持つウィンドウを探すことも機能しませんInspector。WordMail オプションを使用する場合、 のほとんどのプロパティにアクセスしても、実際のインスペクター ウィンドウに (即時に) 影響を与えないためです。Activate複数のインスペクターGetForegroundWindowが既に開いている場合、または実際の Word ウィンドウが存在する場合、最新のインスタンスではなく「最も古い」インスタンスが返されることがよくあります。
私は何年にもわたって他の多くのアプローチを試みてきましたが、最終的には何らかの形で欠陥があることが判明しました. これに対する適度に単純な解決策はまったくありますか?それとも、システムフックを介して既知のウィンドウハンドルの独自のリストを保持し、それらを既知のインスペクターと照合しようとするなど、はるかに精巧なアプローチを採用する必要がありますか? ( CBT フックの使用に関するヒントについては、P Daddyに感謝します)