• 如何打造标签式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给我,谢谢!
  • 相关阅读:
    SU Demos-02Filtering-03Sudipfilt
    SU suspecfk命令学习
    SU suplane命令学习
    (原创)c#学习笔记10--定义类成员01--成员定义01--定义字段
    (原创)c#学习笔记09--定义类08--浅度和深度复制
    (原创)c#学习笔记09--定义类07--结构类型
    (原创)c#学习笔记09--定义类06--接口和抽象类
    (原创)c#学习笔记09--定义类05--类库项目
    (原创)c#学习笔记09--定义类03--构造函数和析构函数
    (原创)c#学习笔记09--定义类02--System.Object
  • 原文地址:https://www.cnblogs.com/zhouyinhui/p/527705.html
Copyright © 2020-2023  润新知