科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件用Visual C#打造多页面网页浏览器

用Visual C#打造多页面网页浏览器

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文使用Visual C#详细介绍如何实现这种多页面浏览功能

作者:朱先忠 来源:天极网 2007年11月13日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
4) 应该在程序命名空间声明之前,包含下面的接口声明以添加对Microsoft HTML (MSHTML) IOleCommandTarget接口的参照引用:

using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Unicode)]

public struct OLECMDTEXT
{
 public uint cmdtextf;
 public uint cwActual;
 public uint cwBuf;
 [MarshalAs(UnmanagedType.ByValTStr,SizeConst=100)]public char rgwz;
}

[StructLayout(LayoutKind.Sequential)]

public struct OLECMD
{
 public uint cmdID;
 public uint cmdf;
}

// IOleCommandTarget的Interop定义

[ComImport,

Guid("b722bccb-4e68-101b-a2bc-00aa00404770"),

InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]

public interface IOleCommandTarget
{
 //重要: 下面方法的顺序非常重要,因为本示例中我们使用的是早期绑定,详见MSDN中有关.NET/COM互操作的参考。
 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);
}

  2、为CGID_IWebBrowser定义一个GUID

  必须定义CGI_IWebBrowser的GUID以通知MSHTML如何来处理你的命令ID。在.NET中实现如下:

private Guid cmdGuid = new Guid("ED016940-BD5B-11CF-BA4E-00C04FD70816");
private enum MiscCommandTarget { Find = 1, ViewSource, Options }

  3、调用Exec()方法

  注意,下列三个过程成功调用Exec()的前提是,已经存在名为webBrowser的浏览器控件的被包容实例。

private mshtml.HTMLDocument GetDocument()
{
 try
 {
  mshtml.HTMLDocument htm = (mshtml.HTMLDocument)axWebBrowser2.Document;
  return htm;
 }
 catch
 {
  throw (new Exception("不能从WebBrowser控件中获取文件对象"));
 }
}

//查看源码的方法

public void ViewSource()
{
 IOleCommandTarget cmdt;
 Object o = new object();
 try
 {
  cmdt = (IOleCommandTarget)GetDocument();
  cmdt.Exec(ref cmdGuid, (uint)MiscCommandTarget.ViewSource,
(uint)SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, ref o, ref o);
 }
 catch(Exception e)
 {
  System.Windows.Forms.MessageBox.Show(e.Message);
 }
}

public void Find()
{
 IOleCommandTarget cmdt;
 Object o = new object();
 try
 {
  cmdt = (IOleCommandTarget)GetDocument();
  cmdt.Exec(ref cmdGuid, (uint)MiscCommandTarget.Find,
(uint)SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, ref o, ref o);
 }
 catch(Exception e)
 {
  System.Windows.Forms.MessageBox.Show(e.Message);
 }
}

//显示“选项”对话框的方法

public void InternetOptions()
{
 IOleCommandTarget cmdt;
 Object o = new object();
 try
 {
  cmdt = (IOleCommandTarget)GetDocument();
  cmdt.Exec(ref cmdGuid, (uint)MiscCommandTarget.Options,
(uint)SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, ref o, ref o);
 }
 catch
 {
  // 注意:因为该过程相应的CMDID是在Internet Explorer处理
  // ,所以此处的异常代码块将总被激活,即使该对话框及其操作成功。
  //当然,你可以通过浏览器选择设置来禁止这种错误的出现。
  //不过,即使出现这种提示,对你的主机也无任何损害。
 }
}

  四、总结

  本文通过C#编例,详细介绍如何实现一种多页面浏览程序的基本原理。欢迎同仁批评指正。 另外,本文所附源程序在Windows 2000/.Net 2003/Internet Explorer 6平台上调试通过。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章