必要な情報を見つけたので、興味のある人のためにこの質問を更新すると思いました。
http://msdn.microsoft.com/en-us/library/system.windows.controls.webbrowser(v=VS.90).aspxの下部に、「ネイティブ IWebBrowser2 へのアクセス」というタイトルのコメントがあります。
これは、必要なインターフェースに到達する方法を示しており、うまく機能しているようです。
編集:MSDNのコメントが消え続けるので、ここにリンクのコンテンツを追加します..
マネージ ラッパーがまだ公開していないネイティブ Web ブラウザー コントロールの機能が多数あります。次のコード スニペットはIWebBrowser2
、WPF WebBrowser コントロールからインターフェイスを取得する方法を示しています。これにより、コントロールの他の方法ではパブリックに公開されていないオブジェクトのメソッドにアクセスできます。ただし、このコード サンプルは完全に信頼できるコードでのみ機能することに注意してください。
まず、IWebBrowser2 のドキュメントを参照してください: http://msdn.microsoft.com/en-us/library/aa752127.aspx ...
このコードをコンパイルするには、COM 参照をSystem32\shdocvw.dll
またはieframe.dll
(IE のバージョンに応じてどちらか) に追加します。
[ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("6d5140c1-7436-11ce-8034-00aa006009fa")]
internal interface IServiceProvider
{
[return: MarshalAs(UnmanagedType.IUnknown)]
object QueryService(ref Guid guidService, ref Guid riid);
}
static readonly Guid SID_SWebBrowserApp =
new Guid("0002DF05-0000-0000-C000-000000000046");
// ...
IServiceProvider serviceProvider = (IServiceProvider)myWebBrowser.Document;
Guid serviceGuid = SID_SWebBrowserApp;
Guid iid = typeof(SHDocVw.IWebBrowser2).GUID;
SHDocVw.IWebBrowser2 myWebBrowser2 =
(SHDocVw.IWebBrowser2) serviceProvider.QueryService(ref serviceGuid, ref iid);
そして、myWebBrowser2 は対話の準備ができています。
次のように、生成されたマネージド ラッパーを介して、ネイティブ Web ブラウザーのイベント ( http://msdn.microsoft.com/en-us/library/aa768309(VS.85).aspx ) を処理することもできます。
SHDocVw.DWebBrowserEvents_Event wbEvents = (SHDocVw.DWebBrowserEvents_Event)myWebBrowser2;
wbEvents.NewWindow += new SHDocVw.DWebBrowserEvents_NewWindowEventHandler(OnWebBrowserNewWindow);
void OnWebBrowserNewWindow(string URL, int Flags, string TargetFrameName, ref object PostData, string Headers, ref bool Processed)
{
// Set Processed to cancel opening of the new window.
}