1

NavigateComplete、DocumentComplete 等工作得很好,但由于某种原因 WindowStateChanged 不能。我正在使用 IE9 进行测试。这个活动被取消了吗?

public class BHO : IObjectWithSite, IOleCommandTarget
{

    IWebBrowser2 browser = null;
    int version = 9;

    void OnNavigateComplete2(object pDisp, ref object URL)
    {
        if (!ReferenceEquals(pDisp, browser))
        {
        }
        else
        {
            var document = browser.Document as IHTMLDocument2;
            var window = document.parentWindow;
            Debug.WriteLine(version + "MainURL: " + URL.ToString());
        }
    }

    void OnWindowStateChanged(uint dwWindowStateFlags, uint dwValidFlagsMask)
    {
        version = version * 2;   //never hit
        Debug.WriteLine(version);
    }

    #region Implementation of IObjectWithSite
    int IObjectWithSite.SetSite(object site)
    {
        Debug.WriteLine("SetSite!");
        if (site != null)
        {
            browser = (IWebBrowser2)site;
            ((DWebBrowserEvents2_Event)browser).NavigateComplete2 +=
       new WebBrowserEvents2_NavigateComplete2EventHandler
              (this.OnNavigateComplete2);
             ((DWebBrowserEvents2_Event)browser).WindowStateChanged +=
       new WebBrowserEvents2_WindowStateChangedEventHandler
              (this.OnWindowStateChanged);

        }

...
4

1 回答 1

1

花了我半天,但我明白了。

默认情况下,VS 将 SHDocVw 嵌入到您的 BHO 中,即使它有效,某些处理程序也不会触发。我猜 IE 最终会使用不同的 SHDocVw?

反正。通过将嵌入互操作设置为“false”并将其注册到 GAC,事件再次开始触发。他们全部。

于 2012-06-12T15:29:47.583 回答