Найдя нужную информацию, я решил обновить этот вопрос для всех, кто заинтересован.
Внизу http://msdn.microsoft.com/en-us/library/system.windows.controls.webbrowser(v=VS.90).aspx есть комментарий под названием «Как добраться до родного IWebBrowser2».
Это показывает, как добраться до требуемого интерфейса и, кажется, работает хорошо.
РЕДАКТИРОВАТЬ : Добавление содержания ссылки здесь, поскольку комментарии на MSDN продолжают исчезать на меня ..
Существует много функциональных возможностей встроенного элемента управления веб-браузера, которые наша управляемая оболочка еще не раскрывает. В следующем фрагменте кода показано, как получить интерфейс 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 готов к взаимодействию.
Вы также можете обрабатывать события собственного веб-браузера (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.
}