ActiveX(四) mshtml 命名空间 重要接口简介

  在上一篇随笔 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(4160)]
    public interface IHTMLDocument2 : IHTMLDocument
    {
        [DispId(1005)]
        IHTMLElement activeElement { get; }
        [DispId(1022)]
        dynamic alinkColor { get; set; }
        [DispId(1003)]
        IHTMLElementCollection all { get; }
        [DispId(1007)]
        IHTMLElementCollection anchors { get; }
        [DispId(1008)]
        IHTMLElementCollection applets { get; }
        [DispId(-501)]
        dynamic bgColor { get; set; }
        [DispId(1004)]
        IHTMLElement body { get; }
        [DispId(1032)]
        string charset { get; set; }
        [DispId(1030)]
        string cookie { get; set; }
        [DispId(1033)]
        string defaultCharset { get; set; }
        [DispId(1014)]
        string designMode { get; set; }
        [DispId(1029)]
        string domain { get; set; }
        [DispId(1015)]
        IHTMLElementCollection embeds { get; }
        [DispId(1031)]
        bool expando { get; set; }
        [DispId(-2147413110)]
        dynamic fgColor { get; set; }
        [DispId(1043)]
        string fileCreatedDate { get; }
        [DispId(1044)]
        string fileModifiedDate { get; }
        [DispId(1042)]
        string fileSize { get; }
        [DispId(1045)]
        string fileUpdatedDate { get; }
        [DispId(1010)]
        IHTMLElementCollection forms { get; }
        [DispId(1019)]
        FramesCollection frames { get; }
        [DispId(1011)]
        IHTMLElementCollection images { get; }
        [DispId(1028)]
        string lastModified { get; }
        [DispId(1024)]
        dynamic linkColor { get; set; }
        [DispId(1009)]
        IHTMLElementCollection links { get; }
        [DispId(1026)]
        HTMLLocation location { get; }
        [DispId(1041)]
        string mimeType { get; }
        [DispId(1048)]
        string nameProp { get; }
        [DispId(-2147412090)]
        dynamic onafterupdate { get; set; }
        [DispId(-2147412091)]
        dynamic onbeforeupdate { get; set; }
        [DispId(-2147412104)]
        dynamic onclick { get; set; }
        [DispId(-2147412103)]
        dynamic ondblclick { get; set; }
        [DispId(-2147412077)]
        dynamic ondragstart { get; set; }
        [DispId(-2147412074)]
        dynamic onerrorupdate { get; set; }
        [DispId(-2147412099)]
        dynamic onhelp { get; set; }
        [DispId(-2147412107)]
        dynamic onkeydown { get; set; }
        [DispId(-2147412105)]
        dynamic onkeypress { get; set; }
        [DispId(-2147412106)]
        dynamic onkeyup { get; set; }
        [DispId(-2147412110)]
        dynamic onmousedown { get; set; }
        [DispId(-2147412108)]
        dynamic onmousemove { get; set; }
        [DispId(-2147412111)]
        dynamic onmouseout { get; set; }
        [DispId(-2147412112)]
        dynamic onmouseover { get; set; }
        [DispId(-2147412109)]
        dynamic onmouseup { get; set; }
        [DispId(-2147412087)]
        dynamic onreadystatechange { get; set; }
        [DispId(-2147412093)]
        dynamic onrowenter { get; set; }
        [DispId(-2147412094)]
        dynamic onrowexit { get; set; }
        [DispId(-2147412075)]
        dynamic onselectstart { get; set; }
        [DispId(1034)]
        IHTMLWindow2 parentWindow { get; }
        [DispId(1021)]
        IHTMLElementCollection plugins { get; }
        [DispId(1047)]
        string protocol { get; }
        [DispId(1018)]
        string readyState { get; }
        [DispId(1027)]
        string referrer { get; }
        [DispId(1001)]
        dynamic Script { get; }
        [DispId(1013)]
        IHTMLElementCollection scripts { get; }
        [DispId(1046)]
        string security { get; }
        [DispId(1017)]
        IHTMLSelectionObject selection { get; }
        [DispId(1069)]
        HTMLStyleSheetsCollection styleSheets { get; }
        [DispId(1012)]
        string title { get; set; }
        [DispId(1025)]
        string url { get; set; }
        [DispId(1023)]
        dynamic vlinkColor { get; set; }

        [DispId(1058)]
        void clear();
        [DispId(1057)]
        void close();
        [DispId(1067)]
        IHTMLElement createElement(string eTag);
        [DispId(1071)]
        IHTMLStyleSheet createStyleSheet(string bstrHref = "", int lIndex = -1);
        [DispId(1068)]
        IHTMLElement elementFromPoint(int x, int y);
        [DispId(1065)]
        bool execCommand(string cmdID, bool showUI = false, object value = Type.Missing);
        [DispId(1066)]
        bool execCommandShowHelp(string cmdID);
        [DispId(1056)]
        dynamic open(string url = "text/html", object name = Type.Missing, object features = Type.Missing, object replace = Type.Missing);
        [DispId(1060)]
        bool queryCommandEnabled(string cmdID);
        [DispId(1062)]
        bool queryCommandIndeterm(string cmdID);
        [DispId(1061)]
        bool queryCommandState(string cmdID);
        [DispId(1059)]
        bool queryCommandSupported(string cmdID);
        [DispId(1063)]
        string queryCommandText(string cmdID);
        [DispId(1064)]
        dynamic queryCommandValue(string cmdID);
        [DispId(1070)]
        string toString();
        [DispId(1054)]
        void write(params object[] psarray);
        [DispId(1055)]
        void writeln(params object[] psarray);
    }

IHTMLDocument2

    [Guid("3050F485-98B5-11CF-BB82-00AA00BDCE0B")]
    [TypeLibType(4160)]
    public interface IHTMLDocument3
    {
        [DispId(1080)]
        string baseUrl { get; set; }
        [DispId(-2147417063)]
        dynamic childNodes { get; }
        [DispId(-2147412995)]
        string dir { get; set; }
        [DispId(1075)]
        IHTMLElement documentElement { get; }
        [DispId(1079)]
        bool enableDownload { get; set; }
        [DispId(1082)]
        bool inheritStyleSheets { get; set; }
        [DispId(-2147412043)]
        dynamic onbeforeeditfocus { get; set; }
        [DispId(-2147412048)]
        dynamic oncellchange { get; set; }
        [DispId(-2147412047)]
        dynamic oncontextmenu { get; set; }
        [DispId(-2147412071)]
        dynamic ondataavailable { get; set; }
        [DispId(-2147412072)]
        dynamic ondatasetchanged { get; set; }
        [DispId(-2147412070)]
        dynamic ondatasetcomplete { get; set; }
        [DispId(-2147412065)]
        dynamic onpropertychange { get; set; }
        [DispId(-2147412050)]
        dynamic onrowsdelete { get; set; }
        [DispId(-2147412049)]
        dynamic onrowsinserted { get; set; }
        [DispId(-2147412044)]
        dynamic onstop { get; set; }
        [DispId(1078)]
        IHTMLDocument2 parentDocument { get; }
        [DispId(1077)]
        string uniqueID { get; }

        [DispId(-2147417605)]
        bool attachEvent(string @event, object pdisp);
        [DispId(1076)]
        IHTMLDocument2 createDocumentFragment();
        [DispId(1074)]
        IHTMLDOMNode createTextNode(string text);
        [DispId(-2147417604)]
        void detachEvent(string @event, object pdisp);
        [DispId(1088)]
        IHTMLElement getElementById(string v);
        [DispId(1086)]
        IHTMLElementCollection getElementsByName(string v);
        [DispId(1087)]
        IHTMLElementCollection getElementsByTagName(string v);
        [DispId(1073)]
        void recalc(bool fForce = false);
        [DispId(1072)]
        void releaseCapture();
    }

IHTMLDocument3

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

        [DispId(1088)]
        IHTMLElement getElementById(string v);
        [DispId(1086)]
        IHTMLElementCollection getElementsByName(string v);
        [DispId(1087)]
        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

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

时间: 2024-10-27 12:26:23

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

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

SQLite3 C/C++ 开发接口简介 1.0 总览 SQLite3是SQLite一个全新的版本,它虽然是在SQLite 2.8.13的代码基础之上开发的,但是使用了和之前的版本不兼容的数据库格式和API. SQLite3是为了满足以下的需求而开发的: 支持UTF-16编码. 用户自定义的文本排序方法. 可以对BLOBs字段建立索引. 因此为了支持这些特性我改变了数据库的格式,建立了一个与之前版本不兼容的3.0版. 至于其他的兼容性的改变,例如全新的API等等,都将在理论介绍之后向你说明,这样

【专家坐堂】四种并发编程模型简介

本文来自网易云社区 概述 并发往往和并行一起被提及,但是我们应该明确的是"并发"不等同于"并行" ?       并发 :同一时间 对待 多件事情 (逻辑层面) ?       并行 :同一时间 做(执行) 多件事情 (物理层面) 并发可以构造出一种问题解决方法,该方法能够被用于并行化,从而让原本只能串行处理的事务并行化,更好地发挥出当前多核CPU,分布式集群的能力. 但是,并发编程和人们正常的思维方式是不一样的,因此才有了各种编程模型的抽象来帮助我们更方便,更不容

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

I/O复用是Linux中的I/O模型之一.所谓I/O复用,指的是进程预先告诉内核,使得内核一旦发现进程指定的一个或多个I/O条件就绪,就通知进程进行处理,从而不会在单个I/O上导致阻塞. 在Linux中,提供了select.poll.epoll三类接口来实现I/O复用. select函数接口 select中主要就是一个select函数,用于监听指定事件的发生,原型如下: 12345 #include<sys/select.h>#include<sys/time.h>int sele

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

1.创建Win32或MFC工程. 2.在预编译或需要使用MSHTML命名空间的头文件中添加以下语句: #include <atlbase.h>    #include <Mshtml.h> #import <mshtml.tlb> 3.前置条件设置完成,现在可以开始使用MSHTML访问里面的智能指针了. 例: MSHTML::IHTMLDocument2Ptr pHTMLDoc2; MSHTML::IHTMLDocument3Ptr pHTMLDoc3; …… 然后解析

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

iOS中常用的四种数据持久化方法简介 iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 [NSUserDefaults standardUserDefaults]就够用了 @interface User : NSObject <NSCoding>@property (nonatomic, assign) NSInteger userID;@property (nonatomic,

Linux wext和nl80211接口简介

inux无线驱动接口简介 在分析wpa_supplicant软件linux版本下无线驱动事件和无线驱动配置代码之前,先简单介绍下linux无线驱动接口的实现技术和发展情况. Linux无线驱动接口有两种标准接口,wext(Wireless Extensions无线扩展接口)和nl80211接口. 在linux-2.6.18版本之前,linux内核代码中并没有提供无线驱动接口以及无线驱动协议栈.wext是由开发者Jean Tourrilhes (惠普实验室软件工程师)定义的一套供用户层软件访问无线

Perl数据库DBI接口简介【转载】

本文转载自:http://blog.csdn.net/like_zhz/article/details/5441946 ##########################################################################可移植的DBI方法:connect    建立到一个数据库服务器的连接disconnect   断开数据库服务器的连接prepare    准备执行一个SQL语句execute    执行准备好的语句do    准备并执行一个SQL

Windows数据库编程接口简介

数据库是计算机中一种专门管理数据资源的系统,目前几乎所有软件都需要与数据库打交道(包括操作系统,比如Windows上的注册表其实也是一种数据库),有些软件更是以数据库为核心因此掌握数据库系统的使用方法以及数据库系统编程接口的使用方法是程序员非常重要的基本技能之一.所以我花了一定的时间学习了在Windows平台上使用COM接口的方式操作数据库.这段时间我会将自己学习过程中掌握的知识和其中的一些坑都发布出来,供个人参考,也方便他人学习 现在常见的DBMS主要有ORACLE.Sybase.Inform

java提高篇(四)-----抽象类与接口

接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是Java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 一.抽象类 我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的.如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类.比如new Animal