2010-03-10 58 views
2

我有一個使用watin的c#windows窗體項目。watin attachto嵌入式瀏覽器

我很想附加到窗體上的網頁瀏覽器控件,這可能嗎?有沒有關於如何附加到嵌入式Web瀏覽器控件的示例代碼。

//Looks like this only works for actual IExplorer instances. 
window = WatiN.Core.Browser.AttachTo<WatiN.Core.IE>(WatiN.Core.Find.ByTitle("Google")); 

回答

0

這是我用來連接到嵌入式Web瀏覽器控件的代碼:

WatiN.Core.IE窗口= NULL;
WatiN.Core.Settings.AutoStartDialogWatcher = false;
window = new WatiN.Core.IE(webBrowser1.ActiveXInstance);

+0

沒有頁面更新,我得到「Internet Explorer狀態未完成時超時」錯誤。任何人都會遇到這個問題 – atwellpub 2011-12-06 23:33:41

+0

我能夠通過在線程模式下執行新的IE創建來解決這個問題。誰知道去圖。 – atwellpub 2011-12-07 02:20:14

+0

@atwellpub你是怎麼做到的?我有同樣的問題。我在Form1_Load上有[STAThread]。這是你指的是什麼? – Jason 2012-12-17 22:32:15

1

也許我失去了一些東西,但你能不能使用WebBrowser控制,並將其連接到WinForms應用程序?

+0

我有我的窗體上的WebBrowser控件。我想使用Watin附加到瀏覽器控件的實例。 – MHop 2010-03-10 19:15:59

0

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

關鍵是,因爲您的應用程序提供了對話框(而不是IE),所以您必須將Settings對象屬性AutoStartDialogWatcher設置爲false。否則,您將無法連接,因爲對話框監視器窗口句柄無效。

我會建議使用類似於: IE newbrowser = new WatiN.Core.IE(embeddedbrowser.IWebBrowser2);

...當然,IWebBrowser2屬性名稱將根據您使用的庫而變化。

1

對我來說,它給了錯誤。

WatiN.Core.Exceptions.TimeoutException了未處理 消息=「超時而Internet Explorer的忙」 源=「WatiN.Core」

0

它有可能使嵌入式瀏覽器控件與華廷的對話框 - 工作處理機制,如果你能得到WebBrowser控件的窗口句柄,如果你正在寫一個包含它(1)

你需要的原因,這個窗口句柄是形式的代碼應該是完全有可能完全是因爲WatiN無法通過IWebBrowser2.HWND屬性檢索它 - 這是我這是預料之中的。 (2)

作爲一個側面說明,即使在處理微軟的IE時,我也經歷了IWebBrowser2.HWND屬性的問題和不穩定的行爲 - 所以我們需要遵循下面概述的方法來解決此類HWND問題。

一旦您掌握了webbrowser控件的窗口句柄,您可以簡單地創建一個代理類來環繞嵌入式web瀏覽器的IWebBrowser2接口(HWND除外)以解決問題。把它放在一起,你現在可以寫:

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控件是一個第三方應用程序,您無法訪問,您可以編寫一個小型實用程序功能來掃描所有窗口,直到您偶然發現包含您所瀏覽的網頁瀏覽器控件的第三方應用程序。您可以在ShellWindows2.CollectInternetExplorerInstances()中查看WatiN的源代碼,以瞭解如何實現這樣的掃描功能。

2:http://support.microsoft.com/kb/244310