现在的位置: 首页 > 综合 > 正文

如何打造标签式IE浏览器 (共享源码)

2013年06月02日 ⁄ 综合 ⁄ 共 3548字 ⁄ 字号 评论关闭
如何打造标签式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”的控件。
         

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

源代码下载http://www.cnblogs.com/Files/zhouyinhui/Surfer.rar

另外,如果您有ie编程方面的电子书,望能e_mail给我,谢谢!
文章来源于 http://www.cnblogs.com/zhouyinhui 版权归原作者所有

抱歉!评论已关闭.