C# watin attachto嵌入式浏览器

C# watin attachto嵌入式浏览器,c#,browser,controls,watin,embedded-browser,C#,Browser,Controls,Watin,Embedded Browser,我有一个使用watin的c#windows窗体项目 我想在表单上附加web浏览器控件,这可能吗?是否有关于如何附加到嵌入式web浏览器控件的示例代码 //Looks like this only works for actual IExplorer instances. window = WatiN.Core.Browser.AttachTo<WatiN.Core.IE>(WatiN.Core.Find.ByTitle("Google")); //看起来这只适用于实际的IExplo

我有一个使用watin的c#windows窗体项目

我想在表单上附加web浏览器控件,这可能吗?是否有关于如何附加到嵌入式web浏览器控件的示例代码

//Looks like this only works for actual IExplorer instances.
window = WatiN.Core.Browser.AttachTo<WatiN.Core.IE>(WatiN.Core.Find.ByTitle("Google"));
//看起来这只适用于实际的IExplorer实例。
window=WatiN.Core.Browser.AttachTo(WatiN.Core.Find.ByTitle(“谷歌”);

也许我这里遗漏了一些东西,但是您不能使用
WebBrowser
控件并将其附加到WinForms应用程序吗?

是的,您可以使用WebBrowser控件,但有一些技巧

关键的一点是,由于应用程序提供的是对话框(而不是IE),因此必须将设置对象属性AutoStartDialogWatcher设置为false。否则,由于对话框观察程序窗口句柄无效,附件将失败

我建议使用以下方法: IE newbrowser=new WatiN.Core.IE(embeddedbrowser.IWebBrowser2)


…当然,IWebBrowser2属性名称将根据您使用的库而更改。

这是我用来附加到嵌入式Web浏览器控件的代码:

WatiN.Core.IE window=null
WatiN.Core.Settings.AutoStartDialogWatcher=false

window=new WatiN.Core.IE(webBrowser1.ActiveXInstance)

对我来说,它给出了错误

WatiN.Core.Exceptions.TimeoutException未处理 Message=“Internet Explorer忙时超时”
Source=“WatiN.Core”

如果您能够获得webbrowser控件的窗口句柄,则可以使嵌入式webbrowser控件与WatiN的对话框处理机制一起工作,如果您正在编写包含该控件的表单的代码,则完全可以使用该控件(1)

您需要此窗口句柄的原因正是因为WatiN无法通过IWebBrowser2.HWND属性检索它-这是意料之中的。(二)

顺便说一句,即使在处理Microsoft的IE时,我也遇到过IWebBrowser2.HWND属性有问题且不稳定的行为-因此,还有一个原因需要遵循下面概述的方法来解决此类HWND问题

一旦您掌握了webbrowser控件的窗口句柄,您就可以简单地创建一个代理类,该类围绕嵌入式web浏览器(HWND除外)的IWebBrowser2接口进行封装,从而解决该问题。把所有这些放在一起,你现在可以写:

 Settings.AutoStartDialogWatcher = true;
 new IE(new ProxyForIWebBrowser2InterfaceToWorkaroundHWNDBugs((IWebBrowser2) webBrowser1.ActiveXInstance, webBrowser1.Handle), true);
希望这有帮助。哦,这是您需要的代理类:

 using System;
 using SHDocVw;

 namespace WatiN.Core.Native.InternetExplorer
 {
public class ProxyForIWebBrowser2InterfaceToWorkaroundHWNDBugs : IWebBrowser2
{
    #region Implementation of IWebBrowser
    private readonly int _ExplicitHwndForIWebBrowser2;
    private readonly IWebBrowser2 _EmbeddedWebBrowserAsIWebBrowser2;
    public ProxyForIWebBrowser2InterfaceToWorkaroundHWNDBugs(IWebBrowser2 embeddedWebBrowserAsIWebBrowser2, IntPtr explicitHwnd)
    {
        _EmbeddedWebBrowserAsIWebBrowser2 = embeddedWebBrowserAsIWebBrowser2;
        _ExplicitHwndForIWebBrowser2 = (int)explicitHwnd;
    }

    void IWebBrowser.GoBack()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.GoBack();
    }

    void IWebBrowser2.GoForward()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.GoForward();
    }

    void IWebBrowser2.GoHome()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.GoHome();
    }

    void IWebBrowser2.GoSearch()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.GoSearch();
    }

    void IWebBrowser2.Navigate(string URL, ref object Flags, ref object TargetFrameName, ref object PostData, ref object Headers)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Navigate(URL, ref Flags, ref TargetFrameName, ref PostData, ref Headers);
    }

    void IWebBrowser2.Refresh()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Refresh();
    }

    void IWebBrowser2.Refresh2(ref object Level)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Refresh2(ref Level);
    }

    void IWebBrowser2.Stop()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Stop();
    }

    object IWebBrowser2.Application
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Application; }
    }

    object IWebBrowser2.Parent
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Parent; }
    }

    object IWebBrowser2.Container
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Container; }
    }

    object IWebBrowser2.Document
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Document; }
    }

    bool IWebBrowser2.TopLevelContainer
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.TopLevelContainer; }
    }

    string IWebBrowser2.Type
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Type; }
    }

    int IWebBrowser2.Left
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Left; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Left = value; }
    }

    int IWebBrowser2.Top
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Top; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Top = value; }
    }

    int IWebBrowser2.Width
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Width; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Width = value; }
    }

    int IWebBrowser2.Height
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Height; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Height = value; }
    }

    void IWebBrowser2.Quit()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Quit();
    }

    void IWebBrowser2.ClientToWindow(ref int pcx, ref int pcy)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.ClientToWindow(ref pcx, ref pcy);
    }

    void IWebBrowser2.PutProperty(string Property, object vtValue)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.PutProperty(Property, vtValue);
    }

    object IWebBrowser2.GetProperty(string Property)
    {
        return _EmbeddedWebBrowserAsIWebBrowser2.GetProperty(Property);
    }

    public void Navigate2(ref object URL, ref object Flags, ref object TargetFrameName, ref object PostData, ref object Headers)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Navigate2(ref URL, ref Flags, ref TargetFrameName, ref PostData, ref Headers);
    }

    public OLECMDF QueryStatusWB(OLECMDID cmdID)
    {
        return _EmbeddedWebBrowserAsIWebBrowser2.QueryStatusWB(cmdID);
    }

    public void ExecWB(OLECMDID cmdID, OLECMDEXECOPT cmdexecopt, ref object pvaIn, ref object pvaOut)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.ExecWB(cmdID, cmdexecopt, ref pvaIn, ref pvaOut);
    }

    public void ShowBrowserBar(ref object pvaClsid, ref object pvarShow, ref object pvarSize)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.ShowBrowserBar(ref pvaClsid, ref pvarShow, ref pvarSize);
    }

    void IWebBrowser2.GoBack()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.GoBack();
    }

    void IWebBrowserApp.GoForward()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.GoForward();
    }

    void IWebBrowserApp.GoHome()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.GoHome();
    }

    void IWebBrowserApp.GoSearch()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.GoSearch();
    }

    void IWebBrowserApp.Navigate(string URL, ref object Flags, ref object TargetFrameName, ref object PostData, ref object Headers)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Navigate(URL, ref Flags, ref TargetFrameName, ref PostData, ref Headers);
    }

    void IWebBrowserApp.Refresh()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Refresh();
    }

    void IWebBrowserApp.Refresh2(ref object Level)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Refresh2(ref Level);
    }

    void IWebBrowserApp.Stop()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Stop();
    }

    object IWebBrowserApp.Application
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Application; }
    }

    object IWebBrowserApp.Parent
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Parent; }
    }

    object IWebBrowserApp.Container
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Container; }
    }

    object IWebBrowserApp.Document
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Document; }
    }

    bool IWebBrowserApp.TopLevelContainer
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.TopLevelContainer; }
    }

    string IWebBrowserApp.Type
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Type; }
    }

    int IWebBrowserApp.Left
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Left; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Left = value; }
    }

    int IWebBrowserApp.Top
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Top; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Top = value; }
    }

    int IWebBrowserApp.Width
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Width; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Width = value; }
    }

    int IWebBrowserApp.Height
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Height; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Height = value; }
    }

    void IWebBrowserApp.Quit()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Quit();
    }

    void IWebBrowserApp.ClientToWindow(ref int pcx, ref int pcy)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.ClientToWindow(ref pcx, ref pcy);
    }

    void IWebBrowserApp.PutProperty(string Property, object vtValue)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.PutProperty(Property, vtValue);
    }

    object IWebBrowserApp.GetProperty(string Property)
    {
        return _EmbeddedWebBrowserAsIWebBrowser2.GetProperty(Property);
    }

    void IWebBrowserApp.GoBack()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.GoBack();
    }

    void IWebBrowser.GoForward()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.GoForward();
    }

    void IWebBrowser.GoHome()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.GoHome();
    }

    void IWebBrowser.GoSearch()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.GoSearch();
    }

    void IWebBrowser.Navigate(string URL, ref object Flags, ref object TargetFrameName, ref object PostData, ref object Headers)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Navigate(URL, ref Flags, ref TargetFrameName, ref PostData, ref Headers);
    }

    void IWebBrowser.Refresh()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Refresh();
    }

    void IWebBrowser.Refresh2(ref object Level)
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Refresh2(ref Level);
    }

    void IWebBrowser.Stop()
    {
        _EmbeddedWebBrowserAsIWebBrowser2.Stop();
    }

    object IWebBrowser.Application
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Application; }
    }

    object IWebBrowser.Parent
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Parent; }
    }

    object IWebBrowser.Container
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Container; }
    }

    object IWebBrowser.Document
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Document; }
    }

    bool IWebBrowser.TopLevelContainer
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.TopLevelContainer; }
    }

    string IWebBrowser.Type
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Type; }
    }

    int IWebBrowser.Left
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Left; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Left = value; }
    }

    int IWebBrowser.Top
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Top; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Top = value; }
    }

    int IWebBrowser.Width
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Width; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Width = value; }
    }

    int IWebBrowser.Height
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Height; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Height = value; }
    }

    string IWebBrowser.LocationName
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.LocationName; }
    }

    string IWebBrowser2.LocationURL
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.LocationURL; }
    }

    bool IWebBrowser2.Busy
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Busy; }
    }

    string IWebBrowser2.Name
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Name; }
    }

    int IWebBrowser2.HWND
    {
        get { return _ExplicitHwndForIWebBrowser2; }
    }

    string IWebBrowser2.FullName
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.FullName; }
    }

    string IWebBrowser2.Path
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Path; }
    }

    bool IWebBrowser2.Visible
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Visible; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Visible = value; }
    }

    bool IWebBrowser2.StatusBar
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.StatusBar; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.StatusBar = value; }
    }

    string IWebBrowser2.StatusText
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.StatusText; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.StatusText = value; }
    }

    int IWebBrowser2.ToolBar
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.ToolBar; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.ToolBar = value; }
    }

    bool IWebBrowser2.MenuBar
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.MenuBar; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.MenuBar = value; }
    }

    bool IWebBrowser2.FullScreen
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.FullScreen; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.FullScreen = value; }
    }

    public tagREADYSTATE ReadyState
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.ReadyState; }
    }

    public bool Offline
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Offline; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Offline = value; }
    }

    public bool Silent
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Silent; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Silent = value; }
    }

    public bool RegisterAsBrowser
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.RegisterAsBrowser; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.RegisterAsBrowser = value; }
    }

    public bool RegisterAsDropTarget
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.RegisterAsDropTarget; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.RegisterAsDropTarget = value; }
    }

    public bool TheaterMode
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.TheaterMode; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.TheaterMode = value; }
    }

    public bool AddressBar
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.AddressBar; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.AddressBar = value; }
    }

    public bool Resizable
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Resizable; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Resizable = value; }
    }

    string IWebBrowser2.LocationName
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.LocationName; }
    }

    string IWebBrowserApp.LocationURL
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.LocationURL; }
    }

    bool IWebBrowserApp.Busy
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Busy; }
    }

    string IWebBrowserApp.Name
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Name; }
    }

    int IWebBrowserApp.HWND
    {
        get { return _ExplicitHwndForIWebBrowser2; }
    }

    string IWebBrowserApp.FullName
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.FullName; }
    }

    string IWebBrowserApp.Path
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Path; }
    }

    bool IWebBrowserApp.Visible
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Visible; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.Visible = value; }
    }

    bool IWebBrowserApp.StatusBar
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.StatusBar; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.StatusBar = value; }
    }

    string IWebBrowserApp.StatusText
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.StatusText; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.StatusText = value; }
    }

    int IWebBrowserApp.ToolBar
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.ToolBar; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.ToolBar = value; }
    }

    bool IWebBrowserApp.MenuBar
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.MenuBar; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.MenuBar = value; }
    }

    bool IWebBrowserApp.FullScreen
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.FullScreen; }
        set { _EmbeddedWebBrowserAsIWebBrowser2.FullScreen = value; }
    }

    string IWebBrowserApp.LocationName
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.LocationName; }
    }

    string IWebBrowser.LocationURL
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.LocationURL; }
    }

    bool IWebBrowser.Busy
    {
        get { return _EmbeddedWebBrowserAsIWebBrowser2.Busy; }
    }

    #endregion
       }
   }
1:即使你没有这样一个表单的源代码访问权限,比如说,webbrowser控件位于你无权访问的第三方应用程序中,你也可以编写一个小的实用程序函数来扫描所有窗口,直到你无意中发现包含你要找的webbrowser控件的第三方应用程序。您可以在ShellWindows2.CollectInternetExplorerInstances()中查看WatiN的源代码,了解如何实现这种扫描函数


2:

我的表单上有一个WebBrowser控件。我想使用Watin附加到浏览器控件的实例。我收到“Internet Explorer状态未完成时超时”错误,并且没有页面更新。有人经历过吗?我可以通过在线程模式下执行新的IE创建来解决这个问题。谁知道你是怎么做到的?我也有同样的问题。我的Form1_负载上有[StatThread]。这就是你所指的吗?我想这就是我所做的:var-thread=new-thread(()=>{watin.Settings.AutoStartDialogWatcher=false;var-ie=new-watin.ie(browser_-main.ActiveXInstance);((WebBrowser)browser_-main).ScriptErrorsSuppressed=true;ie.GoTo(“);etc..});thread.SetApartmentState(ApartmentState.STA);thread.Start();