C#制作ActiveX浏览器插件.net

 

 注意,要引进System.Runtime.InteropServices;命名空间

ID选择器

一、为标签设置id=”ID名称”,而不是class=”类名称”。

二、ID采纳符的先头是井号(#)号,而不是英文圆点(.)

左侧代码编辑器中正是1个ID选用符的完好实例。

1.输入:

公开课

2.,输入:

#setGreen{
   color:green;
}

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>三列布局</title>
<style type="text/css">
body{ margin:0; padding:0; font-size:20px; font-weight:bold}
div{ line-height:50px}
.left{ width:200px; height:600px; background:#ccc; position:absolute; left:0; top:0}
.main{ height:600px; margin:0 310px 0 210px; background:#9CF}
.right{ height:600px; width:300px; position:absolute; top:0; right:0; background:#FCC;}
</style>
</head>

<body>

    <div class="left">left</div>
    <div class="main">设计首页的第一步是设计版面布局。就象传统的报刊杂志编辑一样,我们将网页看作一张报纸,一本杂志来进行排版布局。 虽然动态网页技术的发展使得我们开始趋向于学习场景编剧,但是固定的网页版面设计基础依然是必须学习和掌握的。它们的基本原理是共通的,你可以领会要点,举一反三。</div>
    <div class="right">right</div>
</body>
</html>

 

三列布局:不能用浮动的,

.left{ width:200px; height:600px; background:#ccc; position:absolute; left:0; top:0}
.main{ height:600px; margin:0 310px 0 210px; background:#9CF}
.right{ height:600px; width:300px; position:absolute; top:0; right:0; background:#FCC;}

position:absolute; left:0; top:0  采用绝对布局, 距离左,上边为0;
中间宽度自适应,  margin:0 310px     这里的310>300即距离右边310px,因此会有10px的间距

position:absolute; right:0; top:0  采用绝对布局, 距离右,上边为0;

 

font-familyArialHelveticasans-serif"宋体";

翻译过来便是,假若有一段文字,每一种字符遵照 Arial、Helvetica、无衬线字体、黑体的种种来渲染。

 

a{text-decoration:none;}撤消超链接原来带有的下划线
a:hover{text-decoration:underline;}  鼠标滑过时有下划线出现。

 

图片 1

2.action 浏览者输入的数码被传送到的地点,比如二个PHP页面(save.php)。

图片 2

1.<form>
<form>标签是成对出现的,以<form>开头,以</form>停止。

图片 3

<form    method="post"   action="save.php">
        <label for="username">用户名:</label>
        <input type="text" name="username" />
        <label for="pass">密码:</label>
        <input type="password" name="pass" />
</form>


文本

<textarea  rows="行数" cols="列数">文本</textarea>

留意,这里下方“消除方案”那里要选用“添入化解方案”

<meta http-equiv=”Content-Type” content=”text/html;
charset=utf-八”>无法少那句话,不然会乱码,
倘若有乱码可以改前边的charset .

图片 4

<address>地址</address>

 图片 5

font-size:25px;   

点规定,然后在主输出文件上右键——属性

定义在style中,style在head中

图片 6

<style type="text/css"></style>表示这是样式表,在中间放入css内容;

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>了不起的盖茨比</title>
<style type="text/css">
h2{text-align:center;
font-size:25px;
color:#930;
font-family:微软雅黑;
font-weight:bold;

    }
span{color:red;
}
</style>
</head>

勾选“使程序集COM可知”,点“分明”

4``、在<textarea></textarea>标签之间可以输入默认值。

率先,为控件类UserControl壹增添二个GUID,这些号码将用来B/S系统的客户端调用时使用(能够行使
工具-创立GUID 菜单创设一个GUID):

span{color:red;}为前面包车型地铁“美利坚合作国梦”的独自样式;

直接利用object定义的id属性就足以调用UserControl1类中的方法,是还是不是很便利?

选择单选框、复选框

<input   type="radio/checkbox"   value="值"    name="名称"   checked="checked"/>

1、type:

   当 type=”radio” 时,控件为单选框

   当 type=”checkbox” 时,控件为复选框

2、value:交付数据到服务器的值(后台程序PHP使用)

3、name:为控件命名,以备后台程序 ASP、PHP 使用

4、checked:当设置 checked=”checked” 时,该选拔被暗中同意选中

 单选框中name必须一律, checked=”checked”表明被选中了

 

 

然后选拔“生成”,滚动拉倒尾巴部分,勾选“为COM互操作注册”

行使下拉列表框进行多选

图片 7

 

        #region IObjectSafety 成员

        private const string _IID_IDispatch = "{00020400-0000-0000-C000-000000000046}";
        private const string _IID_IDispatchEx = "{a6ef9860-c720-11d0-9337-00a0c90dcaa9}";
        private const string _IID_IPersistStorage = "{0000010A-0000-0000-C000-000000000046}";
        private const string _IID_IPersistStream = "{00000109-0000-0000-C000-000000000046}";
        private const string _IID_IPersistPropertyBag = "{37D84F60-42CB-11CE-8135-00AA004BB851}";

        private const int INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001;
        private const int INTERFACESAFE_FOR_UNTRUSTED_DATA = 0x00000002;
        private const int S_OK = 0;
        private const int E_FAIL = unchecked((int)0x80004005);
        private const int E_NOINTERFACE = unchecked((int)0x80004002);

        private bool _fSafeForScripting = true;
        private bool _fSafeForInitializing = true;

        public int GetInterfaceSafetyOptions(ref Guid riid, ref int pdwSupportedOptions, ref int pdwEnabledOptions)
        {
            int Rslt = E_FAIL;

            string strGUID = riid.ToString("B");
            pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA;
            switch (strGUID)
            {
                case _IID_IDispatch:
                case _IID_IDispatchEx:
                    Rslt = S_OK;
                    pdwEnabledOptions = 0;
                    if (_fSafeForScripting == true)
                        pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER;
                    break;
                case _IID_IPersistStorage:
                case _IID_IPersistStream:
                case _IID_IPersistPropertyBag:
                    Rslt = S_OK;
                    pdwEnabledOptions = 0;
                    if (_fSafeForInitializing == true)
                        pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA;
                    break;
                default:
                    Rslt = E_NOINTERFACE;
                    break;
            }

            return Rslt;
        }

        public int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions)
        {
            int Rslt = E_FAIL;
            string strGUID = riid.ToString("B");
            switch (strGUID)
            {
                case _IID_IDispatch:
                case _IID_IDispatchEx:
                    if (((dwEnabledOptions & dwOptionSetMask) == INTERFACESAFE_FOR_UNTRUSTED_CALLER) && (_fSafeForScripting == true))
                        Rslt = S_OK;
                    break;
                case _IID_IPersistStorage:
                case _IID_IPersistStream:
                case _IID_IPersistPropertyBag:
                    if (((dwEnabledOptions & dwOptionSetMask) == INTERFACESAFE_FOR_UNTRUSTED_DATA) && (_fSafeForInitializing == true))
                        Rslt = S_OK;
                    break;
                default:
                    Rslt = E_NOINTERFACE;
                    break;
            }

            return Rslt;
        }

        #endregion

font-weight:bold;加粗

安装格局:点开VS顶部菜单栏“工具”——“外部工具”

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>了不起的盖茨比</title>
<style type="text/css">
h2{text-align:center;
font-size:25px;
color:#930;
font-family:微软雅黑;
font-weight:bold;

    }
span{color:red;
}
</style>
</head>
<body>

        <img src="file:///E|ic_fengjing.jpg" width="1024" height="680" alt="显示错误">
<h1>了不起的盖茨比</h1>
                  <h2>侠名</h2>
    <p>1922年的春天,一个想要成名名叫<em>尼克•卡拉威</em>(托比•马奎尔Tobey Maguire 饰)的作家,离开了美国中西部,来到了纽约。那是一个道德感渐失,爵士乐流行,走私为王,股票飞涨的时代。为了追寻他的美国梦,他搬入纽约附近一海湾居住。</p>
<br>

    <p>菲茨杰拉德,二十世纪美国文学巨擘之一,兼具作家和编剧双重身份。他以诗人的敏感和戏剧家的想象为<strong>"爵士乐时代"</strong>吟唱华丽挽歌,其诗人和梦想家的气质亦为那个奢靡年代的不二注解。</p><hr><br>
    <address>
 中国  
    </address>
</body>

</html>

此工具的用途在上面包车型大巴步骤中会讲到

3``、rows :``多行输入域的行数。

然后,大家还必要在页面加载的时候,调用插件的注册JS函数方法,以及此Js函数定义

<br>分行显示文本     <br>为空标签

 至此,恭喜你已成功调控了制作ActiveX浏览器插件的手艺~

3.method  数据传送的不2诀要(get/post)。

点击“应用”,“鲜明”,那就终于安装到位,再重新点开顶部的“工具”菜单看看,里面就有壹项“OLE/COM对象查看器”

h二 位前面的子标题,  text-align:center;文本居中

此处,首要必要引进1个主次集叫Microsoft.mshtml.dll,它在系统文件夹里C:\Program
Files (x86)\Microsoft.NET\Primary Interop Assemblies

应用重新恢复设置按键,重新载入参数表单音讯

<input type="reset" value="重置">

type``:只有当type值设置为reset时,按钮才有重置作用

value``:``按钮上显示的文字

<input type=”submit” value=”确定” /> 
<input type=”reset” value=”重置” />type值确定

 

<table summary=”表格简单介绍文本”>

 

<table>
    <caption>标题文本</caption>
    <tr>
        <td>…</td>
        <td>…</td>
        …
    </tr>
…
</table>

<table summary="本表格记录2012年到2013年库存记录,记录包括U盘和耳机库存量">
  <caption>2012年到2013年库存记录</caption>
  <tr>
    <th>产品名称 </th>
    <th>品牌 </th>
    <th>库存量(个) </th>
    <th>入库时间 </th>
  </tr>
  <tr>
    <td>耳机 </td>
    <td>联想 </td>
    <td>500</td>
    <td>2013-1-2</td>
  </tr>
  <tr>
    <td>U盘 </td>
    <td>金士顿 </td>
    <td>120</td>
    <td>2013-8-10</td>
  </tr>
  <tr>
    <td>U盘 </td>
    <td>爱国者 </td>
    <td>133</td>
    <td>2013-3-25</td>
  </tr>

<a  href="目标网址"  title="鼠标滑过显示的文本">链接显示的文本</a>

 <a  href="https://www.baidu.com"  title="baidu">百度</a>

<a href="目标网址" target="_blank">click here!</a>在新窗口中打开页面
<a href="https://www.baidu.com" target="_blank" >百度</a>

<video width=”300″ height=180 controls=”controls” ”  
 autoplay=”autoplay”>
<source src=”avi/ic_shipin1.flv”/>   

摄像播放
</video>

 controls 假如出现该属性,则向用户呈现控件,比如播放开关。  
 值是autoplay

autoplay要是出现该属性,则摄像在就绪后立即播放。值是autoplay

loop若是出现该属性,则当红娘文件达成播放后重新开始播放。 值是loop

poster 录像未有广播前要彰显的图纸   值是url

 

<video width=”300″ height=180 controls=”controls”
autoplay=”autoplay”  poster=”image/ic_shanshui.jpg”>
 //要是有autoplay 则poster就不必要了
<source src=”avi/<%=video%>” />
录像播放
</video>

 

response重定向

即使用户输入的表单新闻不完整,就会再被带领该表单的输入页面。

能够行使 response的sendRedirect(Url url)方法完结用户的重定向

example3_1.jsp

<%@ page contentType="text/html; charset=gb2312"%>
<html>
<body>
    <form action="example3_3.jsp" method="post">
        姓名:<input type="text" name="name"> <input type="submit"
            value="提交" name="submit">

    </form>
</body>
</html>

example3_3.jsp

<%@ page contentType="text/html; charset=gb2312"%>
<%
    request.setCharacterEncoding("gb2312");
    String name = request.getParameter("name");
    if (name == null || name.length() == 0) {
        response.sendRedirect("example3_1.jsp");

    }
%>欢迎<%=name%>来到本网页.

即未输入姓名就会重新定向到example三_1.jsp

 

<%@ page contentType="text/html; charset=gb2312"%>
<%@ page import="java.util.*"%>
<html>
<p>
    现在的时间是:<br>
    <%
        out.println("" + new Date());//必须要有java.util类
        response.setHeader("Refresh", "1");
    %>

</html>

 

setHeader 响应头,  值为每5s刷新2遍页面。

 

CSS样式

1.内联式css样式表就是把css代码直接写在存活的HTML标签中,如上边代码:

<p style="color:red">这里文字是红色。</p>

贰.嵌入式css样式,就是足以把css样式代码写在<style
type=”text/css”></style>
标签之间。如下边代码达成把多少个<span>标签中的文字设置为革命:

<style type="text/css">
span{
color:red;
}
</style>

三.外部式css样式(也可称之为外联式)正是把css代码写三个单独的外部文件中,那么些css样式文件以“.css”为扩张名,在<head>内(不是在<style>标签内)使用<link>标签将css样式文件链接到HTML文件内,如上边代码:

<link href="base.css" rel="stylesheet" type="text/css" />

注意:

一、css样式文件名称以有意义的英文字母命名,如 main.css。

二、rel=”stylesheet” type=”text/css” 是平昔写法不可修改。

三、<link>标签地点一般写在<head>标签之内。

index.html

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>嵌入式css样式</title>
<link href="style.css" rel="stylesheet" type ="text/css">   //外部式   
<style type="text/css">  //嵌入式
span{
   color:red;
}
</style>
</head>
<body>   //内联式 
    <p>慕课网,    超酷的互联网、IT技术免费学习平台,创新的网络一站式学习、实践体验;服务及时贴心,内容专业、有趣易学。专注服务互联网工程师快速成为技术高手!</p>
</body>       
</html>    

优先级:内联式 > 嵌入式 > 外部式

style.css

span{
   color:blue;
}

 

每一条css样式证明(定义)由两有些构成,格局如下:

选择器{
    样式;
}



类选择器

.类选器名称{css样式代码;}

1、英文圆点开头

2、其中类选器名称能够任意起名(但决不起汉语噢)

选择格局:

率先步:使用方便的竹签把要修饰的始末标志起来,如下:

胆小如鼠

其次步:使用class=”类选择器名称”为标签设置多少个类,如下:

胆小如鼠

其三步:设置类选器css样式,如下:

.stress{color:red;}/*类前面要加入一个英文圆点*/

图片 8

<em>用斜体表示</em>  
<strong>用粗体表示</strong>

 

1``、<textarea>标签是成对出现的,以<textarea>开始,以</textarea>结束。

选择“应用程序”,点开“程序集音讯”

图片 9

您会意识,那么些中就有你碰巧创设的ActiveX控件

<hr>  水平线            <hr>为空标签

图片 10

表单

此间大家只说第三种完成IObjectSafety接口

 

图片 11

空格 &nbsp     

点开工具栏“工具”——“管理加载项”

使用下拉列表框,节省空间

<option value=’提交值’>选项</option>
 提交值即向服务器交由的值, 选项即体现的值

  <option value=”看书”>看书</option>

  <option value=”看书” selected=”selected”>看书</option>  
这几个就在第叁个展现

 

图片 12

2``、cols :``多行输入域的列数。

第六步
使用ActiveX插件

<form  method="post" action="save.php">
        <label>联系我们</label>
        <textarea cols="50" rows="10" >在这里输入内容...</textarea>
</form>

图片 13

<q>对简易的文本的引用</q>  
<blockquote>对长文本的引用</blockquote>

 当中,重点是object标签里的classid属性,属性之中的GUID对应的正是第5步中内定的GUID

文本要显得的内容在body中

图片 14

<form   method="传送方式"   action="服务器文件">

那款工具是用来查看ActiveX控件的,也正是申明你的门类有未有变为叁个ActiveX控件

 

安装项目性质,右键项目——属性

从那之后,ActiveX浏览器插件的安装包就炮制好了,双击setup.exe文件或ActiveX德姆oSetup.msi文件能够将浏览器插件安装到您的微处理器

在类中写上你协调索要的事体逻辑代码,保存

2.创建GUID

 

图片 15

高版本的VS貌似都自带了那么些工具,可是在1些低版本或许安装不完整比如Vs二零零六中不必然有其壹工具,所以在并未有的时候必要设置一下

<body>
<object id="csharpActiveX" classid="clsid:BB725724-65D6-4e71-AA11-DEDFAFE9248F" width="100%" height="150"></object>

    <form id="form1" runat="server">
    <div>
    <input type='button' onclick='csharpActiveX.Test()' value='我是按钮'/>
    </div>
    </form>
</body>
<script type="text/javascript">
    var objCard = document.getElementById("csharpActiveX");

    if (objCard.object==null) {
        alert("csharpActiveX插件未安装!");
    }
    else{
        alert("已检测到csharpActiveX插件!");
    }
</script>
</html>

在此地,作者向页面输出了一个msgActiveX变量,并调用了眼投注册过的Js函数

图片 16

 然后,由于唯有IE援助ActiveX浏览器插件,所以在IE浏览器中开荒那一个页面,看一下成效

图片 17

新建1个门类,选取“Windows窗体控件库”,创制二个用户控件项目“ActiveX德姆o”(注意,那里起名不可能用中文,不然前面会出标题),里面有个用户控件类UserControl一.cs

贰是查询ActiveX组件是还是不是在注册表的Component  Category
Manager里阐明本身达成了CATID_SafeForInitializing和CATID_SafeForScripting。

在AssemblyInfo.cs里添加[assembly:
AllowPartiallyTrustedCallers()],须求引用using System.Security;命名空间

其次步
设置项目性质

接下来,右键安装项目——增加——项目输出

将大家的项目ActiveX德姆o设为主输出

能够看来在那之中有一项ActiveX德姆o.UserControl一,那正是大家设置上去的浏览器插件

设置外部工具“OLE/COM对象查看器”和“创造GUID”(已有那四款工具的能够忽略此步骤)

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace ActiveXDemo
{
    [Guid("BB725724-65D6-4e71-AA11-DEDFAFE9248F"), ProgId("ActiveXDemo.UserControl1"), ComVisible(true)]
    public partial class UserControl1 : UserControl,IObjectSafety
    {

下一场保留,重新编写翻译项目,至此,此时的“ActiveX德姆o.dll”就成了二个ActiveX控件

图片 18

支出条件:VS二零一零

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace ActiveXDemo
{
    [ComImport, GuidAttribute("CB5BDC81-93C1-11CF-8F20-00805F2CD064")]
    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IObjectSafety
    {
        [PreserveSig]
        int GetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] ref int pdwSupportedOptions, [MarshalAs(UnmanagedType.U4)] ref int pdwEnabledOptions);

        [PreserveSig()]
        int SetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] int dwOptionSetMask, [MarshalAs(UnmanagedType.U4)] int dwEnabledOptions);
    }
}

间接将下列代码复制粘贴,不要作其余改动,尤其是GUID,都是永久的,不能改

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
<object id="csharpActiveX" classid="clsid:BB725724-65D6-4e71-AA11-DEDFAFE9248F" width="100%" height="150"></object>

    <form id="form1" runat="server">
    <div>
    <input type='button' onclick='csharpActiveX.Test()' value='我是按钮'/>
    </div>
    </form>
</body>

新建3个Web项目只怕一个Html文件,在急需运用浏览器插件的页面上进入以下代码:

第八步
ActiveX插件调用页面Js

 那一个代码也是牢固的,无法退换,间接复制粘贴就行了

        private IHTMLWindow2 temphtml = null;
        private string functionstr = "";

        public void RegJs(object objWinJs, string funcJs)
        {
            temphtml = (IHTMLWindow2)objWinJs;
            if (temphtml != null && !string.IsNullOrEmpty(funcJs))
            {
                functionstr = funcJs;
            }
            else
            {
                temphtml = null;
                functionstr = "";
                MessageBox.Show("注册ActiveX插件回调脚本失败");
            }
        }    

那会儿,不放心的话,能够再检查我们的ActiveX插件毕竟有未有安装上

率先步 成立项目

以及,试行页面Js函数的代码

引进后,开始在插件项目里写上登记Js函数相关的代码,如下

在原项目消除方案中新建二个安装项目,在VS二零一零中,是如此操作的

第五步
进步ActiveX插件的安全品级

其三步
安装外部工具

为了更有利于直观的看看插件有未有符合规律加载,能够再投入1些检查测试代码,如下:

将Register属性设为vsdrpCOM

 

        private void ShowResult(object s, EventArgs e)
        {
            try
            {
                //必须要阻塞线程一段时间,以免在交易超时的情况下,由于read太快导致读取不完整
                System.Threading.Thread.Sleep(500);
                string txt = serialPort.ReadExisting();

                temphtml.execScript("var msgActiveX='" + txt+"';", "JScript");
                temphtml.execScript(functionstr + "()", "JScript");

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }     
        }

其次,为了让ActiveX控件获得客户端的信任,控件类还索要完成多少个名称为“IObjectSafety”的接口,因此在档次中增加3个接口类IObjectSafety

图片 19

一是查询ActiveX组件是还是不是落实了IObjectSafety接口,并且重回脚本安全;

再也编写翻译安装项目,张开安装项目所在目录

<script type="text/javascript">
    Ext.onReady(
    function() {
        objCard.regJs(window, 'test');
    }
    );
    function test() {
        var str = msgActiveX.substring(5);
        var objJson = eval('(' + str + ')');
        alert(objJson.responseCode);
        //alert("回调函数执行成功"); 
    }
</script>

IE怎么精通三个插件是本子安全的?它是经过以下多个法子。

 第四步
制作成安装文件

安装形式同上,只可是命令程序的地方一般是C:\Program Files
(x86)\Microsoft Visual Studio 9.0\Common7\Tools\guidgen.exe

新建项目——其余项目系列——安装和布署——安装项目

下一场,增多两个“OLE/COM对象查看器”,对应的指令程序壹般放在C:\Program
Files\Microsoft SDKs\Windows\v6.0A\Bin\OleView.Exe

同样,须要引入System.Runtime.InteropServices;命名空间

继之,在控件类UserControl第11中学完成IObjectSafety的接口

那便是OLE/COM对象查看器的作用

点击“OLE/COM对象查看器”,展开左边的“.NET Category”

1.OLE/COM指标查看器

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图