在上一篇随笔 ActiveX(三)ActiveX 调用 Js 中,我们已经可以获得js中window对象的强类型接口、即 mshtml.IHTMLWindow2 ,通过该接口、我们可以调用js函数。那么我们再试一试其他的方法呢,看看结果是否符合预期:

  

        private void btnAlert_Click(object sender, EventArgs e)
{
if (this.window2 != null)
{
this.window2.alert("C#CodeAlert:" + this.txtPwd.Text);
}
} private void btnLocation_Click(object sender, EventArgs e)
{
if (this.window2 != null && this.window2.location != null)
{
this.window2.alert(this.window2.location.toString());
}
}

  

  哈哈,试了一下,没有问题。 但是经过使用发现 location 属性是只读的,并且、如果通过反射强制设置 location 属性,则会抛出异常哦。

  现在知道了 window , 那 document 呢? mshtml 命名空间中有没有提供相应的接口呢? 经过查找发现、document实现了如下的两个接口:

  

    [Guid("332C4425-26CB-11D0-B483-00C04FD90119")]
[TypeLibType()]
public interface IHTMLDocument2 : IHTMLDocument
{
[DispId()]
IHTMLElement activeElement { get; }
[DispId()]
dynamic alinkColor { get; set; }
[DispId()]
IHTMLElementCollection all { get; }
[DispId()]
IHTMLElementCollection anchors { get; }
[DispId()]
IHTMLElementCollection applets { get; }
[DispId(-)]
dynamic bgColor { get; set; }
[DispId()]
IHTMLElement body { get; }
[DispId()]
string charset { get; set; }
[DispId()]
string cookie { get; set; }
[DispId()]
string defaultCharset { get; set; }
[DispId()]
string designMode { get; set; }
[DispId()]
string domain { get; set; }
[DispId()]
IHTMLElementCollection embeds { get; }
[DispId()]
bool expando { get; set; }
[DispId(-)]
dynamic fgColor { get; set; }
[DispId()]
string fileCreatedDate { get; }
[DispId()]
string fileModifiedDate { get; }
[DispId()]
string fileSize { get; }
[DispId()]
string fileUpdatedDate { get; }
[DispId()]
IHTMLElementCollection forms { get; }
[DispId()]
FramesCollection frames { get; }
[DispId()]
IHTMLElementCollection images { get; }
[DispId()]
string lastModified { get; }
[DispId()]
dynamic linkColor { get; set; }
[DispId()]
IHTMLElementCollection links { get; }
[DispId()]
HTMLLocation location { get; }
[DispId()]
string mimeType { get; }
[DispId()]
string nameProp { get; }
[DispId(-)]
dynamic onafterupdate { get; set; }
[DispId(-)]
dynamic onbeforeupdate { get; set; }
[DispId(-)]
dynamic onclick { get; set; }
[DispId(-)]
dynamic ondblclick { get; set; }
[DispId(-)]
dynamic ondragstart { get; set; }
[DispId(-)]
dynamic onerrorupdate { get; set; }
[DispId(-)]
dynamic onhelp { get; set; }
[DispId(-)]
dynamic onkeydown { get; set; }
[DispId(-)]
dynamic onkeypress { get; set; }
[DispId(-)]
dynamic onkeyup { get; set; }
[DispId(-)]
dynamic onmousedown { get; set; }
[DispId(-)]
dynamic onmousemove { get; set; }
[DispId(-)]
dynamic onmouseout { get; set; }
[DispId(-)]
dynamic onmouseover { get; set; }
[DispId(-)]
dynamic onmouseup { get; set; }
[DispId(-)]
dynamic onreadystatechange { get; set; }
[DispId(-)]
dynamic onrowenter { get; set; }
[DispId(-)]
dynamic onrowexit { get; set; }
[DispId(-)]
dynamic onselectstart { get; set; }
[DispId()]
IHTMLWindow2 parentWindow { get; }
[DispId()]
IHTMLElementCollection plugins { get; }
[DispId()]
string protocol { get; }
[DispId()]
string readyState { get; }
[DispId()]
string referrer { get; }
[DispId()]
dynamic Script { get; }
[DispId()]
IHTMLElementCollection scripts { get; }
[DispId()]
string security { get; }
[DispId()]
IHTMLSelectionObject selection { get; }
[DispId()]
HTMLStyleSheetsCollection styleSheets { get; }
[DispId()]
string title { get; set; }
[DispId()]
string url { get; set; }
[DispId()]
dynamic vlinkColor { get; set; } [DispId()]
void clear();
[DispId()]
void close();
[DispId()]
IHTMLElement createElement(string eTag);
[DispId()]
IHTMLStyleSheet createStyleSheet(string bstrHref = "", int lIndex = -);
[DispId()]
IHTMLElement elementFromPoint(int x, int y);
[DispId()]
bool execCommand(string cmdID, bool showUI = false, object value = Type.Missing);
[DispId()]
bool execCommandShowHelp(string cmdID);
[DispId()]
dynamic open(string url = "text/html", object name = Type.Missing, object features = Type.Missing, object replace = Type.Missing);
[DispId()]
bool queryCommandEnabled(string cmdID);
[DispId()]
bool queryCommandIndeterm(string cmdID);
[DispId()]
bool queryCommandState(string cmdID);
[DispId()]
bool queryCommandSupported(string cmdID);
[DispId()]
string queryCommandText(string cmdID);
[DispId()]
dynamic queryCommandValue(string cmdID);
[DispId()]
string toString();
[DispId()]
void write(params object[] psarray);
[DispId()]
void writeln(params object[] psarray);
}

IHTMLDocument2

    [Guid("3050F485-98B5-11CF-BB82-00AA00BDCE0B")]
[TypeLibType()]
public interface IHTMLDocument3
{
[DispId()]
string baseUrl { get; set; }
[DispId(-)]
dynamic childNodes { get; }
[DispId(-)]
string dir { get; set; }
[DispId()]
IHTMLElement documentElement { get; }
[DispId()]
bool enableDownload { get; set; }
[DispId()]
bool inheritStyleSheets { get; set; }
[DispId(-)]
dynamic onbeforeeditfocus { get; set; }
[DispId(-)]
dynamic oncellchange { get; set; }
[DispId(-)]
dynamic oncontextmenu { get; set; }
[DispId(-)]
dynamic ondataavailable { get; set; }
[DispId(-)]
dynamic ondatasetchanged { get; set; }
[DispId(-)]
dynamic ondatasetcomplete { get; set; }
[DispId(-)]
dynamic onpropertychange { get; set; }
[DispId(-)]
dynamic onrowsdelete { get; set; }
[DispId(-)]
dynamic onrowsinserted { get; set; }
[DispId(-)]
dynamic onstop { get; set; }
[DispId()]
IHTMLDocument2 parentDocument { get; }
[DispId()]
string uniqueID { get; } [DispId(-)]
bool attachEvent(string @event, object pdisp);
[DispId()]
IHTMLDocument2 createDocumentFragment();
[DispId()]
IHTMLDOMNode createTextNode(string text);
[DispId(-)]
void detachEvent(string @event, object pdisp);
[DispId()]
IHTMLElement getElementById(string v);
[DispId()]
IHTMLElementCollection getElementsByName(string v);
[DispId()]
IHTMLElementCollection getElementsByTagName(string v);
[DispId()]
void recalc(bool fForce = false);
[DispId()]
void releaseCapture();
}

IHTMLDocument3

  在 IHTMLDocument3 中 发现的比较重要的几个方法,是 IHTMLDocument2 中没有的。

        [DispId()]
IHTMLElement getElementById(string v);
[DispId()]
IHTMLElementCollection getElementsByName(string v);
[DispId()]
IHTMLElementCollection getElementsByTagName(string v);

  document 有了,那 element 呢? element 似乎有点多、一共有四个,常用的有两个、分别为:IHTMLElement、IHTMLElement2。不做过多解释。

  如果把 element 再具体一些、像 Frame、 Form、input 等等 都有相对应的接口的,由此可以看出 mshtml 命名空间强大之处。  

  附一个简单应用demo,通过id获取element,然后得到按钮的显示文本。

        private void btnId_Click(object sender, EventArgs e)
{
if (this.document3 != null)
{
IHTMLElement ele = this.document3.getElementById("btnId");
if (ele != null)
{
var attri = ele.getAttribute("value") as object;
if (attri != null)
{
MessageBox.Show(attri.ToString());
}
}
}
}

完整的测试项目demo: TestActiveX.zip

(暂完,如有需要后续补充)

ActiveX(四) mshtml 命名空间 重要接口简介的更多相关文章

  1. [Effective Java]第四章 类和接口

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  2. SQLite3 C/C++ 开发接口简介

    SQLite3 C/C++ 开发接口简介 1.0 总览 SQLite3是SQLite一个全新的版本,它虽然是在SQLite 2.8.13的代码基础之上开发的,但是使用了和之前的版本不兼容的数据库格式和 ...

  3. ADI高速信号采集芯片与JESD204B接口简介

    ADI高速信号采集芯片与JESD204B接口简介 JESD204B接口 介绍: JEDEC Standard No. 204B (JESD204B)—A standardized serial int ...

  4. Lock接口简介

    在Java多线程编程中,我们经常使用synchronized关键字来实现同步,控制多线程对变量的访问,来避免并发问题. 但是有的时候,synchronized关键字会显得过于沉重,不够灵活.synch ...

  5. 如何MSHTML命名空间解析HTML文件(MSHTML::IHTMLDocument2Ptr 提示错误)

    1.创建Win32或MFC工程. 2.在预编译或需要使用MSHTML命名空间的头文件中添加以下语句: #include <atlbase.h>    #include <Mshtml ...

  6. iOS中常用的四种数据持久化方法简介

    iOS中常用的四种数据持久化方法简介 iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 ...

  7. Linux中的IO复用接口简介(文件监视?)

    I/O复用是Linux中的I/O模型之一.所谓I/O复用,指的是进程预先告诉内核,使得内核一旦发现进程指定的一个或多个I/O条件就绪,就通知进程进行处理,从而不会在单个I/O上导致阻塞. 在Linux ...

  8. java多线程Lock接口简介使用与synchronized对比 多线程下篇(三)

    前面的介绍中,对于显式锁的概念进行了简单介绍 显式锁的概念,是基于JDK层面的实现,是接口,通过这个接口可以实现同步访问 而不同于synchronized关键字,他是Java的内置特性,是基于JVM的 ...

  9. SoapUI SoapUI测试WebService协议接口简介

    SoapUI测试WebService协议接口简介 by:授客 QQ:1033553122 1. 创建项目,入口:File -> New SOAP Project,或者右键默认项目Project- ...

随机推荐

  1. DM 多路径存储

    DM多路径存储 系统环境:RHEL5.4 small install  selinux and iptables disabled主机规划:主机网卡软件station133eth0: 192.168. ...

  2. ASP.Net MVC开发基础学习笔记:三、Razor视图引擎、控制器与路由机制学习

    一.天降神器“剃须刀” — Razor视图引擎 1.1 千呼万唤始出来的MVC3.0 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留 ...

  3. 多彩的Console打印新玩法

    Chrome应该是每一个Web开发者必备的工具之一.它有而强大的Devtool,辅助我们的JavaScript调试,审视DOM元素,CSS即时修改等.以及它还有一个的庞大的插件系统,同时我们也可以很容 ...

  4. Net作业调度(一) -Quartz.Net入门

    背景 很多时候,项目需要在不同时刻,执行一个或很多个不同的作业. Windows执行计划这时并不能很好的满足需求了,迫切需要一个更为强大,方便管理,集群部署的作业调度框架. 介绍 Quartz一个开源 ...

  5. Maven和Gradle对比

    Java世界中主要有三大构建工具:Ant.Maven和Gradle.经过几年的发展,Ant几乎销声匿迹.Maven也日薄西山,而Gradle的发展则如日中天.笔者有幸见证了Maven的没落和Gradl ...

  6. gulp使用小结(二)

    接上篇文章接Gulp使用小结(一) 内容如下: 首先,偶在gulp-demos上已经提交了个较通用的栗子...俺琢磨半天,原准备分阶段搞些 Gulp 套路,但是写完介个栗子之后,觉得已经能覆盖绝大多数 ...

  7. 修改input框默认黄色背景

    input:-webkit-autofill, textarea:-webkit-autofill, select:-webkit-autofill { -webkit-box-shadow: 0 0 ...

  8. Android图片处理

    相信做Android开发的小伙伴对于Android图片压缩.裁剪一定有很深的印象,今天我将带领大家一起学习一下这个看着高深莫测的知识,以便再以后的学习.工作中可以帮助到大家. 首先我们看一下这个问题出 ...

  9. 【原创】开源Math.NET基础数学类库使用(02)矩阵向量计算

                   本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新  开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 前言 ...

  10. ASP.NET Core的配置(3): 将配置绑定为对象[下篇]

    我们在<读取配置信息>通过实例的形式演示了如何利用Options模型以依赖注入的方式直接获取由指定配置节绑定生成的Options对象,我们再次回顾一下当初我们编写的程序.如下面的代码片段所 ...