c# - 如何获取 mshtml.IHTMLDocument6 或 mshtml.IHTMLDocument7?

标签 c# internet-explorer-11 ihtmldocument

我在 Windows 7 中使用 IE11。 然后我在 C# 项目 c:\Windows\System32\mshtml.tld 中添加了一个引用并尝试获取 mshtml.IHTMLDocument6 或 mshtml.IHTMLDocument7,但 VS2013 看不到它。 我只能获取 mshtml.IHTMLDocument、mshtml.IHTMLDocument2 .. mshtml.IHTMLDocument5。

IHTMLDocument7 接口(interface) https://msdn.microsoft.com/ru-ru/library/windows/hardware/ff975572

最佳答案

选择 MSHTML 程序集引用,查看其 Path 属性,您会发现问题所在:

C:\WINDOWS\assembly\GAC\Microsoft.mshtml\7.0.3300.0__b03f5f7f11d50a3a\Microsoft.mshtml.dll

这是 mshtml 类型库的 PIA,安装在任何安装了 VS 的程序员机器上。 Version 7.0.3300是.NET 1.0时代的一个版本号,已经14岁了。当然早于 IE11,这就是为什么它没有后来的接口(interface)类型。使用 PIA 永远不会是错的,它确保您的程序可以在任何版本的 IE 上运行,一直到 IE6。

但这不是您想要的,您必须从 IE11 类型库生成您自己的互操作库。运行 Visual Studio 命令提示符,导航到您的项目目录并键入此命令:

  Tlbimp c:\windows\system32\mshtml.tlb /out:Interop.mshtml.dll

它会滚动很长一段时间,它很大,并吐出几个关于 PIA 存在的警告和几个不能直接从 .NET 程序使用的晦涩方法和类型。你可以忽略它们,它们在 PIA 中也不起作用。

现在您的项目目录中有 Interop.mshtml.dll 文件。返回 VS,删除旧的 MSHTML 引用并使用“项目”>“添加引用”>“浏览”选择您刚刚创建的新引用。它的“Embed Interop Types”属性默认为 True,不再需要 PIA,您也不必使用程序部署该文件。将文件 checkin 源代码管理,这样您只需执行一次。

请注意,当您的程序在未安装所需版本的 IE 的机器上运行时,它可能会因 E_NOINTERFACE 异常而终止。您可以使用 as 运算符将文档引用转换为 IHtmlDocument7,如果 IE 较旧,它将为 null。

关于c# - 如何获取 mshtml.IHTMLDocument6 或 mshtml.IHTMLDocument7?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38585100/

相关文章:

c# - 如何使用 DataContractJsonSerializer 解析嵌套的 json 对象?

javascript - Angular 5 (IE11) 错误 : Uncaught (in promise): Error: Cannot match any routes

html - Microsoft 是否有 HTML5 服务器发送事件的等效项?

MSHTML 教程

c# - 使用 IHTMLDocuments 1、2、3 和 4

c# - 使用 C# 或 SQL 从文本中提取关键字以进行 SEO

c# - 混淆删除数据上下文类

c# - 读取 POST 请求 XML - boolean 值始终读取为 false

internet-explorer - IE11 上的 Selenium WebDriver