zoukankan      html  css  js  c++  java
  • 如何打造标签式IE浏览器 (共享源码)

    如何打造标签式IE浏览器(C#)

                                  电子科技大学软件学院03级02班 周银辉

    1,看看效果

    Surfer_part.PNG


    Surfer.PNG


    2,关于Browser控件
            如果您用的IDE是VisualStudio 2005, 那么您会发现,上面有个WebBrowser控件,请 不要 使用该控件来开发这个浏览器(原因是它缺少了很多参数,将使您的工作在中途陷入困境)
           请使用axWebBrowser控件。在VisualStudio的工具箱中,右击鼠标 -----> 选择项 ----->  Com组件  ------->  "Microsoft Web 浏览器", 然后该控件就被添加到工具箱了.


    3,导航到指定网页
          导航函数为Navigate(String),使用它打开指定的网页

    4,“在新窗口中打开”
           首次创建网页浏览器时,都会为这样一个问题而郁闷:当“在新窗口中打开”时,新弹出的页面将在您系统默认的浏览器中打开,而不是在你所编写的浏览器中。这也是为什么不使用VisualStudio2005的WebBrowser控件的原因之一。
           注意到axWebBrowser控件的NewWindow2事件,参数DWebBrowserEvents2_NewWindow2Event  e 有一个ppDisp字段(VisualStudio2005的WebBrowser控件没有该字段),  设置e.ppDisp = myBrowser.Application; 就可以了。其中myBrowser只的是您要在其中打开网页的那个axWebBorwser对象。
          NewWindow3事件只支持XP sp2以后的版本。

    5,“前进”与“后退”
           它们分别对应控件的GoBack()和GoForward()函数。
           但,如何判断但前可否前进或后退?(axWebBrowser控件没有WebBrowser控件的CanGoBack与CanGoForward属性)。
           注意到,axWebBrowser控件的CommandStateChange事件,参数DWebBrowserEvents2_CommandStateChangeEvent  e有两个字段e.command和e.enable。 e.command: 值为1时针对前进按钮,值为2时针对后退按钮;e.enable:表明所针对的按钮当前是否可用。您可以根据此来启用或停用“前进”“后退”按钮。


    6,“页面另存为”,“打印”,“打印预览”,“查找”等
            它们对应axWebBrowser的同一个函数ExecWB(  )   ,只是传入的参数不同而已。

    7,“Internet选项”,“参看源文件”
            在这之前,您应该添加对“msHtml.dll”的引用,添加引用-----> Com ---->"microsoft HTML object library"
      然后定义定义 IOleCommandTarget 接口:
    [ComImport, Guid("b722bccb-4e68-101b-a2bc-00aa00404770"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        
    public interface IOleCommandTarget
        
    {
            
    void QueryStatus(ref Guid pguidCmdGroup, UInt32 cCmds,
            [MarshalAs(UnmanagedType.LPArray, SizeParamIndex 
    = 1)] OLECMD[] prgCmds, ref OLECMDTEXT CmdText);
            
    void Exec(ref Guid pguidCmdGroup, uint nCmdId, uint nCmdExecOpt, ref object pvaIn, ref object pvaOut);
        }

     并定义一个函数来取得axWebBrowser对象的当前文档(mshtml.HTMLDocument对象):
    /// <summary>
            
    /// 获取当前的HtmlDocument对象
            
    /// </summary>
            
    /// <returns></returns>

            private mshtml.HTMLDocument GetCurrentHtmlDocument()
            
    {
                mshtml.HTMLDocument doc 
    = null;
                AxWebBrowser browser 
    = this.GetCurrentBrowser();
                
    if (browser != null)
                
    {
                    doc 
    = browser.Document as mshtml.HTMLDocument;
                }


                
    return doc;

            }


    注意mshtml.HTMLDocument别忘记加mshtml限定,否则会与System.Windows.Forms.HTMLDocment产生歧义。

    以及一个枚举:

     private enum MiscCommandTarget
            
    {
                Find 
    = 1,
                ViewSource,
                Options
            }
     

    然后我们的查找函数的函数体就可以这样写了:
     //查找
                mshtml.HTMLDocument doc = this.GetCurrentHtmlDocument();
                
    if (doc != null)
                
    {
                    IOleCommandTarget cmdTarget 
    = doc as IOleCommandTarget;
                    Object o 
    = new object();
                    
    try
                    
    {
                        cmdTarget.Exec(
    ref cmdGuid, (uint)MiscCommandTarget.Find,
                           (
    uint)SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, ref o, ref o);
                    }

                    
    catch
                    
    {
                    }

                }


    8,“收藏夹”
            “收藏夹”,没有必要去调用API,您完全可以读取“C:\Documents and Settings\UserName\Favorites”下的文件夹和文件来打造您自己的个性收藏夹
               收藏夹路径:string path = Environment.GetFolderPath(Environment.SpecialFolder.Favorites);
       收藏夹文件,也就是收藏夹目录下的那些快捷方式,其后缀名为“.url”,虽然您在操纵系统中中看不到其后缀。其实际为一个纯文本文件,将它拖到记事本中,可以看到其内容,比如:
    [InternetShortcut]
    URL=http://zhouyinhui.cnblogs.com/
    Modified=
    IconFile=
    IconIndex=0
             有了这些知识,您完全可以任意操纵“收藏夹”了。
              另外,如果您希望当收藏夹中文件或文件夹有任何改动时,你的程序都能自动发现,并做出相应反应,那么请注意一个叫做“FileSystemWatcher”的控件。
             

    --------------------------------------------

    源代码下载https://files.cnblogs.com/zhouyinhui/Surfer.rar

    另外,如果您有ie编程方面的电子书,望能e_mail给我,谢谢!
  • 相关阅读:
    HAProxy、Keepalived 在 Ocatvia 的应用实现与分析
    Octavia 的 HTTPS 与自建、签发 CA 证书
    Octavia 创建 loadbalancer 的实现与分析
    OpenStack Rally 质量评估与自动化测试利器
    自建 CA 中心并签发 CA 证书
    Failed building wheel for netifaces
    通过 vSphere WS API 获取 vCenter Datastore Provisioned Space 置备空间
    OpenStack Placement Project
    我们建了一个 Golang 硬核技术交流群(内含视频福利)
    没有图形界面的软件有什么用?
  • 原文地址:https://www.cnblogs.com/zhouyinhui/p/527705.html
Copyright © 2011-2022 走看看