然后在IE地址栏中输入以下地址:http://localhost/mp/" />

C#开发OCX IE控件

C#开发OCX IE控件
C#开发OCX IE控件

c# 开发Active控件

首先,建立一个WinForm控件项目MyActive,并拖入一个Lable控件,文字设为HelloWorld,如图:

此时编译项目,可以生成MyActive.dll,将些dll拷贝到IIS的虚拟根目录下,然后建立一个网页文件test.html,此网页文

件的代码如下:

测试测试

Width="184" Height="96" VIEWASTEXT>

然后在IE地址栏中输入以下地址:http://localhost/mp/test.html,我们看到出现如下界面:

此时,我们的控件第一步就已经完成了!

但此时还未完在,只能在本机显示正常,如果换另一台机子就出显示一个红叉,或者弹出对话框说这个控件没有任何权限,所以必须声明这个控件必须使用赋予的权限,才可以显示出界面.

我们在AssemblyInfo.cs中引用System.Security命名空间,并添加一句[assembly :

AllowPartiallyTrustedCallers()]

现在重新编译,并且替换以前的dll,界面又可以显示出来了.

此时,我们的按件还算不上真正的Active控件,这个控件到现在为止,还只是能够实现自身的显示,并且不能实现更多的功能,比如实现与脚本的交互或者操作客户端的注册表或者磁盘。这是由于.Net Framework的安全模型所限制的。如果我们希望这个控件突破.Net Framework安全模型的限制,实现与脚本的交互或者操作客户端的注册表或者磁盘的话,必须要让它成为真正的ActiveX控件。下面,我们把刚才的控件变成真正的ActiveX控件。

1:使用工具->创建GUID,生成一个GUID,并修改UserControl1.cs,首先增加引用

System.Runtime.InteropServices命名空间,并在Demo前面加入一条语句

[Guid("E017DDD5-35BC-4af5-A0FA-C55D4A43A03C")](这串是生成的GUID每次都不一样的,它是Active唯一

的标识符),如图:

2:修改项目属性,如下图:

将为Com Interop注册由false改成true.

3:重新编译,此时我们使用工具->OLE/COM对象查看器,就可以查看到自已注册的Active控件,如图:

现在,我们已经可以像使用其它ActiveX控件一样在网页中显示了。在https://www.360docs.net/doc/7212405909.html,erControl1点击鼠标右键,如图:

选择Copy HTML Tag to Clipboard,可以将代码拷入剪贴板,现在我们将test.html的代码修改成如下:

测试测试

Height="96" VIEWASTEXT>

然后再在IE中打开这个网页,我们发现又可显示,这时就是真正的Active控件了.

接上回,现在的Active是真正意义上的Active了,然后我们在Demo中加入ShowMessage方法:

public void ShowMessage(string msg)

{

if(msg!=null)

{

MessageBox.Show(msg);

}

}

如下图示:

再重新编译.然后我们修改test.html的代码如下,新增一按钮用于调用刚加的ShowMessage时事,现在再在IE里打开网址,我们就可以做交互了.但结果却让人失望,我们发现IE跳出了拦截对话框,说Active控件不安全,不能与JS进行交

互,如下图示:

根据提示,我们判断可以通过修改IE的设置使控件运行。打开IE的工具->Internet选项->安全->本地Intranet->自定义级别->对没有标记为安全的ActiveX控件进行初始化和运行,将其值设为启用。我们刷新页面,现在终于可以

正确运行了,点击按钮会弹出"hello world"的对话框.

当然,我们不能指望我们的客户和我们一样修改这个值。毕竟,一是操作麻烦,二是给电脑带来了很大的安全风险。在互联网上搜索之后,发现必须要实现IObjectSafety接口,把ActiveX控件标记为安全的ActiveX控件。在搜索MSDN 之后,我找到了IObjectSafety接口的定义。这就好办了。首先我们自己用C#实现这个接口:

实现IObjectSafety的方法如下:

先在命名空间里定义好该接口及实现方法,代码如下:

[Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064"),

InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]

public interface IObjectSafety

{

void GetInterfacceSafyOptions(System.Int32 riid,out System.Int32 pdwSupportedOptions,out

System.Int32 pdwEnabledOptions);

void SetInterfaceSafetyOptions(System.Int32 riid,System.Int32 dwOptionsSetMask,System.Int32

dwEnabledOptions);

}

图示:

然后,将我们的Demo继承此接口,用如下语句:public class UserControl1 :

https://www.360docs.net/doc/7212405909.html,erControl,IObjectSafety,图示如上.

然后我们在类UserControl1中实现IObjectSafety的方法,代码如下(不需要修改):

public void GetInterfacceSafyOptions(System.Int32 riid,out System.Int32 pdwSupportedOptions,out

System.Int32 pdwEnabledOptions)

{

pdwSupportedOptions = 1; //不要修改该代码

pdwEnabledOptions = 2; //不要修改该代码

//return;

}

public void SetInterfaceSafetyOptions(System.Int32 riid,System.Int32

dwOptionsSetMask,System.Int32 dwEnabledOptions)

{

//return;

}

如下图示:

重新编译,然后我们再次在IE里运行测试页面test.html,些时我们发现一切功能都正常了.图示如下:

至此,我们的Active基本成功,可以在此基础上根据自已的需要再加相关的功能.

下面将说明Active控件的发布.

上一篇记录了OCX的开发。

相对于开发工作,部署显得不是那么重要,但却是最困难的一步,也是最后一步。

控件的部门总的说来要完成以下几件事,或者说实现以下几个功能:

1、客户端第一次访问页面时自动安装(自动提示用户下载).

2、有新版本发布时自动下载最新版并安装。

经测试还发现,我的2.0框架下开发的控件,不能直接在客户机上进行注册(regAsm.exe:C#开发的ActiveX控件只能用此程序注册,而不能使用RegSvr32),不知道是不是框架版本的

问题,只能做成安装文件。

打包成安装文件具体的就不说了,和打包其他项目一样的步骤,但需要注意以下几点:

1、针对控件生成的DLL中有一个Register属性,该属性一定要设置为vsdraCOM,否则安装包只会将DLL文件简单拷到你的目标目录下,设置该值后,安装包才会进行注册表的写入,相当

于进行regasm注册。

2、还有一个属性Permanent,看该属性的描述说明是说指定该DLL文件在卸载程序时是否移除,一般性的惯性思维都是设置为true时表示在卸载程序时要移除该dll文件,但经过测试发现设置为flase时才会进行移除操作。如果不移除老版本的文件,新版本安装时不会覆盖原有的文

件。所以此属性显得很重要了。

一般说来发布OCX最常用的就是打成CAB包,该方式最简单但也最麻烦,需要搞证书。所以我就自己实现了一种不需要证书的发布方式(前提是要生成安装包:XXXX.msi)。

为了实现自动下载并安装,我把MSI包又制作为自解压包,之后文件名就变成了XXXXXXX.EXE 了(这个包的制作就不多说了,用RAR直接可以进行压缩,网上也有很多介绍),这样当用户通过IE下载到本地后,IE会针对EXE类型的文件提示用户是否要现在运行,如果用户选择运行,

就会进行自动安装了。整个实现原理就是如此的简单,但在简单的过程中却有比较麻烦的步骤,让页面通知客房端IE下载控件的步骤就较麻烦了。

在控件所在的页面(我用的是JSP页面)只能使用JS脚本进行判断是否需要安装控件或者开载

新版本进行安装。

下面我说说通过JS来判断控件的问题。需要判断以下2个内容:

1、判断是否需要新安装。

2、是否发布了新版本的判断。

需要通过JS读取注册表(有这个东东注定该项目不能移植到非WINDOWS操作系统上了)下的控件的相关项或者键值。如果没找到相应的键则表示没有进行安装,需要新安装。具体判断

逻辑直接上代码:

主函数:

var lastModiDatetime = "<%=lastModiDatetime%>";//读取的服务器上的控件文件

的最后修改日期

//判断当前本地计算机上是否已注册了控件。

//如果已注册了控件,再次判断是否是最新版本(JAVA现在没有直接提供对文件版本的获取,通过获取文件最后修改日期来变相对比文件新旧)

//要实现此功能,要求每一次发布新版本控件时必须在应用服务器上安装并注册最新的控件。

//并把安装路径下的最新RuntimeData.dll及RunData.dll和最新的安装包:

//wellalarmruntimedata.exe(根据RuntimeDataSetup.msi制作的自解压RAR安装包)拷到WEB应用程序下的petrol/cab下,拷RuntimeData.dll及RunData.dll是为了让JAVA 能够获取控件的最新修改日期,拷wellalarmruntimedata.exe是为了让客户端IE在服务器

上能找到下载路径及文件。

window.onload=function()

{

//在系统提示用户是否允许交互前判断当前控件是否加载,通过此属性判断当前是否注

册了COM组件

var isReg = true;

//通过获取注册表属性得到安装路径

var hkey_root,hkey_path,hkey_key,path;

hkey_root="HKEY_CLASSES_ROOT"

hkey_file://\\CLSID\\{80C07FCA-841C-43C9-BD34-E9F3A6E87A85}\\Inpr ocServer32\\">\\CLSID\\{80C07FCA-841C-43C9-BD34-E9F3A6E87A85}\\Inproc Server32\\"; //80C07FCA-841C-43C9-BD34-E9F3A6E87A85就是开发篇

强调的控件的GUID

try

{

var RegWsh = new ActiveXObject("WScript.Shell");

hkey_key="CodeBase" ;

path = RegWsh.RegRead(hkey_root+hkey_path+hkey_key);

//获取本地机器上的组件版本号

var assembly =

RegWsh.RegRead(hkey_root+hkey_path+"Assembly");

if(assembly!=null)

{

//获取版本号

var versionNos = assembly.split("Version=")[1];

var versionNo =

versionNos.substring(0,versionNos.indexOf(","));

//查找是否注册此版本号.找到最新版本的就采用此版本的安装路径

try

{

var path = RegWsh.RegRead(hkey_root+hkey_path+ versionNo +

"\\" + hkey_key);

}

catch(ex)

{

isReg = false;

}

}

}

catch(e){}

//注意,当用户不允许脚本运行时path也是为NULL值,但只要安装注册了控件,不放

管用户是否同意脚本运行,

//MWellAlm控件都会被创建成object

if((path==null && document.getElementById("MWellAlm")==null)

|| !isReg)

{

//没有注册此控件或者此控件已被卸载

msg.style.display = '';

ctlload.style.display = 'none';

msg.innerHTML = '本地计算机上未安装“井场预警及实时数据显示控件”或此控件已被卸载,不能正确显示此页面,需要下载最新的控件!
';

msg.innerHTML += "请[运行]自动下载的文件或者 点击下载最新显示控

";

document.getElementById("loadctl").click();

return;

}

if(path!=null && document.getElementById("MWellAlm")==null)

{

alert("当前控件已安装注册但不能正确显示,请关闭所有的IE浏览器后重试!");

return;

}

document.getElementById("MWellAlm").stop(); //调用控件的方法之一

//以下就是判断是否发布了新版本

if(path!=null && path!="")

{

var fso = new ActiveXObject("Scripting.FileSystemObject");

var f1 = fso.GetFile(path);

//FSO获取的文件最后修改日期是UTC格式的,JAVASCRIPT还没有对此日期格

式操作对象.所以只有转换成字符来处理

//而且此UTC日期串与从北京时间转换来的UTC串格式不相同

var lastDate = ""+f1.DateLastModified; //转换成字符串

var v = new Date();

v.setTime(lastModiDatetime);

//直接通过toUTCString()的格式:Thu, 18 Dec 2008 06:46:04 UTC //获取的文件最后修改时间的UTC格式:Thu Dec 18 14:46:04 UTC+0800

2008

//经测试,这2个UTC时间之前除格式不同外,在小时上还不相同。前者比后者

少了8小时

//在小时上+上8小时,因为这个UTC时间是从北京时间转换来的

v.setHours(v.getHours()+8);

//把从北京时间转换来的UTC时间转换成数组,在后者中逐个匹配,都匹配上就

说明时间相等

var ds = v.toUTCString().replace(",","").split(" ");

//为了保证不出现左右滑动匹配的情况(18不能与118、181匹配),在匹配项与被

匹配项左右都加上一个空格

var baseUtc = " "+lastDate.replace("+0800","")+" ";

var isEqual = true;

for(var i=0; i

{

var temp = " "+ds+" ";

if(baseUtc.indexOf(temp)==-1)

{

isEqual = false;

break;

}

}

if(!isEqual)

{

document.getElementById("MWellAlm").click();

document.getElementById("MWellAlm").clearAll();

msg.style.display = '';

ctlload.style.display = 'none';

msg.innerHTML = '本地计算机上安装的“井场预警及实时数据显示控件”不是最新版本,不能正确显示此页面,需要下载最新的控件!
';

msg.innerHTML += "请[运行]自动下载的文件或者 点击下载最新显示控

";

msg.innerHTML += '
注意:在安装最新控件之前请保证已通过[控制面板->添加或者删除程序]卸载了旧版本的控件!';

document.getElementById("loadctl").click();

return;

}

msg.style.display = 'none';

ctlload.style.display = '';

document.getElementById("MWellAlm").click();

document.getElementById("MWellAlm").start();

}

}

以上就是我实现的控件发布的全部内容。为了保证能顺利发布,要求客户端IE最好把控件所在的站点加为信任站点,并调低安全限制,否则容易发生控件能显示,但不能进行用户交互的情况。

以上功能全部测试通过,而且现在项目中也在正常使用。

OCX技术现在不被人们所看好,也不被推广,但在实际项目中很多时候却不得不运用这些鸡肋技术来解决实际问题,或者实现特定功能,所以很多问题还要参考实际问题找到合适的解决办法。

ocx控件制作步骤

制作activex控件(ocx)步骤1.安装IDE(.NET) 2.第一步 3.第二步

4.第三步 双击解决方案中的backup3Ctrl 5.第四步 制作按钮控件需要编辑的事件 属性中 得到按钮按下事件,编辑代码 void Cbackup3Ctrl::OnLButtonDown(UINT nFlags, CPoint point) { if( MessageBox("确定要开始帐前备份吗?", "确定 ",MB_YESNO|MB_DEFBUTTON2)==IDYES)

WinExec("c:\\中心日终\\backup_before.bat", SW_SHOW); else return; COleControl::OnLButtonDown(nFlags, point); } 6.第五步 在代码中找OnDraw方法:填写代码 // Cbackup3Ctrl::OnDraw - 绘图函数 void Cbackup3Ctrl::OnDraw( CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid) { DoSuperclassPaint(pdc, rcBounds); CSize Extent = pdc->GetTextExtent("备份中"); CPoint pt( rcBounds.CenterPoint().x - Extent.cx/2, rcBounds.CenterPoint().y - Extent.cy/2 ); int nMode = pdc->SetBkMode(TRANSPARENT); pdc->TextOut(pt.x, pt.y, "备份中"); } 7.第六步 生成解决方案

ActiveX控件的开发及其工控界面设计

文章编号:1006-1576(2005)03-0105-02 ActiveX控件的开发及其工控界面设计 范艳军,孙力 (华南理工大学自动化科学与工程学院,广东广州 510640) 摘要:ActiveX控件的开发及其工控界面设计,采用VC框架和类向导开发,以MFC ActiveX ControlWizardk自动生成空OCX文件,并将设备作成OCX文件。设备控件外观可通过PHOTOSHOP画出或将设备照片作为资源文件载入控件得到。通过控件的事件,方法和属性以实现控件与工控软件内核的沟通。 关键词:ActiveX控件;工控界面;VC;OCX文件 中图分类号:TP391.9 文献标识码:A Development of ActiveX Control and Design of Industrial Control Interface FAN Yan-jun, SUN Li (College of Automation Science & Engineering, South China University of Technology, Guangzhou 510640, china) Abstract: The ActiveX control is developed and interface of industrial control is designed with the VC frame and guide of class. An empty OCX file was created automatically with MFC ActiveX Controlwizard, and the control of equipment was made into the field OCX. The facade of equipment control was drawn with PHOTOSHOP or the photo of equipment used as VC resource file was loaded control. The communication between control and the kernel of industrial control software is realized through control event, method and attribute. Keywords: ActiveX; Industrial control interface; VC; OCX file 1 引言 为形象的表现控制现场,最好的办法就是让用户界面上的设备具有和真实仪器相似的外观。VC 以其强大、灵活的特点成为主流开发平台。利用其图形图像处理功能可方便开发出与真实设备外观相似的控件,添加必要的事件、方法和属性之后即可通过该控件与控制现场进行交流,以表现控制现场和进行有效控制。作好与现场设备有相似外观的单个控件后,通过基于对象的编程开发工具调用控件,将所作单个设备控件连接,调整各自工作状态,就能反映整个控制现场。 2 ActiveX控件的开发 ActiveX技术是基于COM(组件对象模型)建立起来的编码和API协议,是与平台无关的技术。即在一种编程语言下开发的控件无需修改,就可在另一种编程语言中使用。这与使用Windows通用控件类似。利用VISUAL C++提供的框架向导和类向导可开发OCX文件。使用MFC ActiveX ControlWizardk可自动生成空的OCX文件,每个OCX文件可以含有多个控件。但OCX文件过大不利于容器程序的调用,所以将一类设备制作成一个OCX文件。利用PHOTOSHOP画出工控设备外观,或将实际的工控设备拍照作为资源文件载入控件,作为设备控件外观。然后在OCX文件的ONDRAW 函数里填写代码,其编程方法如下: int w_CBitmap,h_Cbitmap; //定义两个整型变量存储位图的宽和高 Cbitmap Bitmap; //定义位图类 BITMAP BM; //定义BITMAP结构,以获取位图的参数CDC Pdcl; // 定义一个CDC类 Bitmap.Loadmap(IDC_BITMAP); //将位图装载,该位图即是设备外观 Bitmap.GetObject(sizeof(BM)); //得到位图结构 w_CBitmap=BM.bmWidth; w_Cbitmap=BM.bmHeight; Pdcl.CreateCompatibleDC(Pdc); //创建于显示设备场景兼容的CDC对象 Pdcl.SelectObject(&Bitmap); //将位图送入场景 Pdc?StretchBlt (rcBounds.left,rcBounds.top,rcBounds.Width(), rcBounds.Height(), &Pdcl , 0 , 0 ,w_Cbitmap, h_Cbitmap, SRCCOPY); //将位图显示在(0,0)为上端点,宽为rcBounds.Width() //高为rcBounds.Height()的区域内, //其中Pdc,rcBounds为ONDRAW函数的参数Bitmap.DelectObject( ); 其中rcBounds.left为控件左顶点的横坐标,rcBounds.top为控件左顶点的纵坐标,rcBounds.Width(),rcBounds.Height() 为控件的宽与高。通过这段代码将资源号为IDB_BITMAP1位图作为设备外观来显示,工控界面上的设备与现场设备就具有近似的外观,可模拟工作现场。 制作了具有设备外观的静态控件后,还须在工控软件中表现设备的动态工作状态。为此通过MFC ClassWizard添加一个WM_TIMER消息的处理函数 收稿日期:2004-11-08;修回日期:2005-02-24 作者简介:范艳军(1978-),男,山西人,2001年毕业于中北大学,现华南理工大学在读硕士,从事智能控制理论与应用研究。 ·105·

ACTIVEX网页控件开发(详细)

步步学ACTIVEX网页控件开发 转载自IT168 [ https://www.360docs.net/doc/7212405909.html,/ ] 第1页:创建ActiveX控件 本文将首先介绍如何使用Visual Studio开发一个简单的ActiveX控件,然后介绍ActiveX控件开发相关的基础知识,比如方法,属性和事件等,最后介绍如何利用这些知识,实现ActiveX控件和网页页面之间的通信。 MyActiveX控件的效果图 简介 ActiveX是由Microsoft在90年代中期提出的一项技术。利用ActiveX技术,开发者可以创建像Java小程序applet一样的小型应用程序。这些应用程序可以被下载然后在Microsoft的浏览器中运行。这篇文章是为那些想学习如何开发他们的第一个ActiveX控件的Visual C++开发者准备的。

当我自己尝试学习这些技术的时候,我发现很多针对ActiveX技术的资料都已经不再适用了,都已经过时了,或者丢失了很多关键性的信息,这些都使得我 在为我的项目创建一个ActiveX控件的时候,变得困难重重。这篇文章将帮助你实现ActiveX网页控件开发的快速入门。本文将首先介绍如何使用 Visual Studio开发一个简单的ActiveX控件,然后介绍ActiveX控件开发相关的基础知识,比如方法,属性和事件等,最后介绍如何利用这些知识,实现ActiveX 控件和网页页面之间的通信。 另外,你也将学习到如何在默认的Internet Explorer安全设置下取消掉控件加载过程中的警告或者错误提示,使你的控件成为一个“安全”的ActiveX控件。在本文中,我们将创建一个实际的ActiveX控件。在控件加载的过程中,它将显示一个动态的进度条,告诉用户控件正在加载并处理信息。同时,这个控件 也将展示如何在ActiveX控件和Web页面之间传递信息。本文将引导你一步 步地利用Microsoft Visual Studio 2005完成ActiveX控件的开发工作。 创建ActiveX控件 要创建一个ActiveX控件,首先启动Visual Studio 2005,执行下面这些步骤: 1.选择“文件”菜单,然后选择“新建”->“项目”。 2.在“新建项目”对话框中,如下图1所示,选择“Visual C++”分类下的“MFC”。然后选择“MFC ActiveX控件”作为项目模板。 第2页:添加对动态GIF动画的支持 3.将新项目命名为“MyActiveX”,然后选择项目的保存目录,最后点击“确定” 按钮,关闭“新项目”对话框,进入“MFC ActiveX控件”向导。

使用MFC开发ActiveX(ocx)控件

作者: 中国电波传播研究所青岛分所郎锐 时间: 2004-03-09 出处: yesky 一、前言 二、建立工程框架 三、属性、方法以及事件的添加 四、实现属性表 五、在包容程序中使用ActiveX控件 六、小结 前言 ActiveX控件是一种实现了一系列特定接口而使其在使用和外观上更象一 个控件的COM组件。ActiveX控件这种技术涉及到了几乎所有的COM和OLE的技术精华,如可链接对象、统一数据传输、OLE文档、属性页、永久存储以及OLE 自动化等。 ActiveX控件作为基本的界面单元,必须拥有自己的属性和方法以适合不 同特点的程序和向包容器程序提供功能服务,其属性和方法均由自动化服务的IDispatch接口来支持。除了属性和方法外,ActiveX控件还具有区别于自动化服务的一种特性--事件。事件指的是从控件发送给其包容程序的一种通知。与窗口控件通过发送消息通知其拥有者类似,ActiveX控件是通过触发事件来通知其包容器的。事件的触发通常是通过控件包容器提供的 IDispatch接口来调用 自动化对象的方法来实现的。在设计ActiveX控件时就应当考虑控件可能会发生哪些事件以及包容器程序将会对其中的哪些事件感兴趣并将这些事件包含进来。与自动化服务不同,ActiveX控件的方法、属性和事件均有自定义(custom)和库存(stock)两种不同的类型。自定义的方法和属性也就是是普通的自动化方法和属性,自定义事件则是自己选取名字和Dispatch ID的事件。而所谓的库存方法、属性和事件则是使用了ActiveX控件规定了名字和Dispatch ID的"标准"方法、属性和事件。 ActiveX控件可以使COM组件从外观和使用上能与普通的窗口控件一样, 而且还提供了类似于设置Windows标准控件属性的属性页,使其能够在包容器程序的设计阶段对ActiveX控件的属性进行可视化设置。ActiveX控件提供的这些功能使得对其的使用将是非常方便的。本文下面即以MFC为工具对ActiveX 控件的开发进行介绍。 建立工程框架 通过"MFC ActiveX ControlWizard"向导可以非常容易的建立一个MFC ActiveX控件工程框架。按照默认的选项将建立如图1所示的工程结构:

VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程

VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程 开篇语:最近在弄ocx控件发布到https://www.360docs.net/doc/7212405909.html,网站上使用,就是用户在使用过程中,自动下载安装ocx控件。(此文章也是总结了网上好多人写的文章,我只是汇总一下,加上部分自己的东西,在这里感谢所有在网上发表相关内容的朋友们。) ActiveX控件用于Web的过程是将控件嵌入主页中,用户通过浏览器访问该主页时,将主页中的控件下载,并在用户机器上注册,以后就可在用户的浏览器上运行。控件下载一次后就驻留在用户本地机器上,下次再访问相同的主页时,可不再下载该控件,而是直接运行用户本地的控件。这里控件容器就是浏览器,用户不需要通过浏览器调用控件的属性或方法。因此,开发面向Web 的ActiveX控件比开发桌面的控件还要简单些,所复杂的是如何将该控件很好地嵌入主页,使用户能正常浏览。下面介绍这个问题。 一.创建MFC ActiveX项目 1.打开VS2005新建MFC项目。这里我们取名为“ActiveXDemo”。 2.输入项目名称为“ActiveXDemo”和项目位置。点击“确定”按钮,打开向导对话框。

WoSign 免费提供的时间戳服务URL:https://www.360docs.net/doc/7212405909.html,/timestamp 时间戳服务非常重要,添加时间戳后,即使您的代码签名证书已经过期,但由于您的代码是在证书有效期内签名的,则时间戳服务保证了此代码仍然可信,最终用户仍然可以放心下载,使得即使代码签名证书已经过期,您也无需重签和重新发布已经签名的代码。 3.选择“控件设置”选项卡,具体设置可参考上图。其它选项卡为默认设置。最后点击“完成”按钮保存设置。 二.添加控件方法 VC2005会为我们自动创建好MFC ActiveX程序框架,我们只要给该ActiveX控件添加方法即可。现在我们给控件添加一个“AddFun”方法,这个方法是将两个数相加并返回结果。 1.点击“视图”,打开“类视图”窗口。

C#生成ocx控件

用C#编写ActiveX控件(一) 前些日子做一个Web项目,必须自己编写一个ActiveX控件。如今的ActiveX控件大多是使用VB/C++来开发的,而我对他们并不熟悉,因此考虑使用熟悉的C#编写ActiveX 控件。 首先,建立一个WinForm控件项目HelloWorld,并拖入一个Label控件,文字设为HelloWorld,如图: UserControl1.cs内容如下: using System; using System.Collections; using https://www.360docs.net/doc/7212405909.html,ponentModel; using System.Drawing; using System.Data; using System.Windows.Forms; namespace HelloWorld { ///

/// UserControl1 的摘要说明。 /// public class Demo : https://www.360docs.net/doc/7212405909.html,erControl {

private https://www.360docs.net/doc/7212405909.html,bel label1; ///

///必需的设计器变量。 /// private https://www.360docs.net/doc/7212405909.html,ponentModel.Container components = null; public Demo() { // 该调用是 Windows.Forms 窗体设计器所必需的。 InitializeComponent(); // TODO: 在 InitComponent 调用后添加任何初始化 } /// ///清理所有正在使用的资源。 /// protected override void Dispose( bool disposing ) { if( disposing ) { if( components != null ) components.Dispose(); } base.Dispose( disposing ); } 组件设计器生成的代码

C# ACTIVEX控件开发 打包CAB安装部署 含源码及全过程开发文档

1.问题场景 在C/S架构的系统中,客户端要实现某些业务功能,可以通过安装相关的应用程序集来方便的实现。同样的需求,在B/S架构的系统里实现起来却比较困难。因为所有的程序都放在服务器端,客户端只是采用浏览器,通过HTTP协议来访问服务器端。比较成熟的解决办法是开发ActiveX控件安装到客户端,这样客户端的浏览器就可以访问本地的ActiveX控件来执行相关的本地操作。通常开发ActiveX使用C,C++或VB开发,本文将要谈论的,就是使用C#开发一个ActiveX控件。 3.注意的地方,C#开发的ActiveX控件只可在装有Framework的系统上才能用。 2.开发工具 Visual Studio2010 .NET版本:2.0 开发语言:C# 3.ActiveX控件项目创建 (1),新建一个【Windows窗体控件库项目】,项目名为ActiveXDemo 选择.NET Framwork2.0版本,因为.Net2.0安装文件只有20多M,客户端容易接受,而且如今多数家用电脑都装了.Net2.0 (2),需要更改两个地方的设置,选中刚创建的ActiveXDemo项目: 1).右键选择“属性>>应用程序>>程序集信息”设置,勾选“使程序集COM可见”:

2).右键选择“属性>>应用程序>>生成”设置,勾选“为COM互操作注册”(注意,此处如果是在debug 状态下修改的,那么在调到release状态下还需要再设置一次): 4.ActiveX控件功能添加 (1),添加一个用户控件

(2),为了使该用户控件作为一个ActiveX控件进行使用,还需要做以下修改: 首先,为控件类MiugoX.cs添加GUID,这个编号将用于B/S系统的客户端调用时使用(可以使用工具-创建GUID菜单创建一个GUID): [Guid("DF0769A5-99D3-4BE0-90B8-91C65A92118C"),ProgId("ActiveXDemo.MiugoX"),ComVisible(true)] public partial class MiugoX:UserControl,IObjectSafety { …… //DF0769A5-99D3-4BE0-90B8-91C65A92118C就¨a是o?刚?刚?创???建?§的ì?Guid (3),为了让ActiveX控件获得客户端的信任,控件类还需要实现一个名为“IObjectSafety”的接口。先创建该接口(注意,不能修改该接口的GUID值):添加一个接口IObjectSafety,实现该接口的目的就是提高程序的安全性,以便客户端IE在不更改设置的情况下可以预行该ActiveX控件。接口成员如下:using System; 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()]

Delphi快速开发OCX步骤

Delphi快速开发OCX步骤 首先要弄明白你要写的OC X是用在客户端还是用在服务器端 假如用在客户端: 1、创建 打开delphi 7,选择菜单“new”->“other”->“activex”->“active form”->输入项目名称,系统自动给你创建了3个文件,一个是项目文件,一个是form的单元文件,还有一个后缀带TLB 的文件。这三个文件中的你只需要更改form的单元文件,项目文件一般不需要写什么,TLB文件有系统自动维护。 2、增加接口函数 所谓接口函数就是调用OCX的程序可以直接调用的函数,如果你要写的函数不提供外部函数可以按常规声明就可以。但要声明接口函数则必须按步骤声明,有两种途径, 其一:选择form单元文件,然后点击“edit”->“add to interface”,弹出一个对话框,输入要声明的函数,如:function fun:integer; 其二:选择form单位文件,然后点击“view”->“Type Library”,弹出一个对话框,然后点击工具栏中“add a interface”可以增加函数或过程。 说明:在这里注意几个地方, 第一,一定要选form文件才可以,否则相应的菜单都是不可用的; 第二、声明函数或过程的参数类型要注意string->BSTR(第二种途径)或WideString(第一种途径)。增加属性也函数类同。 3、调试 我是用html调试的,所以可用在delphi种配置run的参数“run”->“parametes”,弹出一对话框,在“host application”中输入C:\Program Files\Internet Explorer\IEXPLORE.EXE,在“parametes”中http://192.168.6.9/my.htm,这样就可以调试delphi代码了 4、发布 在没有build前,可以“project”->“web deployment”中配置(主要输入ocx的地址和web 服务器的url),然后可以“web deploy”发布,其实就是生成了一个htm文件,不过该文件里包含了调用方法而已。但是delphi好像至运行执行一次,发布后这两个菜单就不可用

用C#编写ActiveX控件

您正在看的C#.NET教程是:用C#编写ActiveX控件。 首先,建立一个WinForm控件项目HelloWorld,并拖入一个Label控件,文字设为HelloWorld,如图: UserControl1.cs内容如下: using System; using System.Collections; using https://www.360docs.net/doc/7212405909.html,ponentModel; using System.Drawing; using System.Data; using System.Windows.Forms; namespace HelloWorld { /**////

/// UserControl1 的摘要说明。 /// public class Demo : https://www.360docs.net/doc/7212405909.html,erControl { private https://www.360docs.net/doc/7212405909.html,bel label1; /**//// /// 必需的设计器变量。 /// private https://www.360docs.net/doc/7212405909.html,ponentModel.Container components = null; public Demo() { // 该调用是Windows.Forms 窗体设计器所必需的。 InitializeComponent(); // TODO: 在InitComponent 调用后添加任何初始化 } /**//// /// 清理所有正在使用的资源。

///

protected override void Dispose( bool disposing ) { if( disposing ) { if( components != null ) components.Dispose(); } base.Dispose( disposing ); } 组件设计器生成的代码#region 组件设计器生成的代码 /**//// /// 设计器支持所需的方法- 不要使用代码编辑器 /// 修改此方法的内容。 /// private void InitializeComponent() { &nb 您正在看的C#.NET教程是:用C#编写ActiveX控件。sp; https://www.360docs.net/doc/7212405909.html,bel1 = new https://www.360docs.net/doc/7212405909.html,bel(); this.SuspendLayout(); // // label1 // https://www.360docs.net/doc/7212405909.html,bel1.Location = new System.Drawing.Point(32, 32); https://www.360docs.net/doc/7212405909.html, = "label1"; https://www.360docs.net/doc/7212405909.html,bel1.Size = new System.Drawing.Size(120, 32); https://www.360docs.net/doc/7212405909.html,bel1.TabIndex = 0; https://www.360docs.net/doc/7212405909.html,bel1.Text = "HelloWorld"; https://www.360docs.net/doc/7212405909.html,bel1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // Demo //

ocx控件开发过程

目录 1. 参考资料: (2) 2. 控件制作过程: (2) 3.控件进行打包并进行数据鉴名 (3) 4. 写html,完成程序 (5) 1 / 5

1.参考资料: (1)利用VC6.0的向导创建一个ocx控件的示例 (2)vc6<实用>开发activex并发布全攻略(二)(初级篇) 网址:https://www.360docs.net/doc/7212405909.html,/ibznphone/article/details/8066322 2. 控件制作过程: (1) 打开vc6.0,新建一个MFC ActiveXControlWizard项目: (2) 在项目中添加自定义方法sayhello

(3)对项目进行测试 打开vc的工具->ActiveX Control Test Container菜单。选择MyActivex控件,然后再选择Control->InvokeMethods选项: 可以看到返回值是“hello!”,系统sayhello函数是可以使用的。 注:最后在html加载控件需要classid,此控件classid为7F8BB7A3-A741-4E53-A620-5442A789D7B5。 3.控件进行打包并进行数据鉴名 (1) 控件制作完毕并不能直接使用,而是需要注册,手动注册的方法不必赘述,我参考本文 3 / 5

列的第二篇参考资料用makeCAB工具包进行处理。下图为各种证书文件和cab打包文件生成后的情景。 (2) 使用makeCAB工具包中的Code Signing Wizard签署CAB文件 细节就不写了,详细在参考资料2,后面的个图为签名成功的截图。

OCX控件编写

OCX控件 新建->项目->MFCActiveX 完成后编译器自动添加四个类。 型如: 一.事件的添加方法: 1.常用事件 右键Ctrl类->添加->添加事件->常用事件(Click事件为例)

在其他程序调用控件时在控件事件中就可以添加Click事件。在点击新建的对话框中的控件时就会执行Click事件函数。 如下图 2.自定义方法 右键.lib类的第一个节点->添加方法

添加后在其他程序调用控件时就可以给控件添加变量并调用方法。 二.添加属性 以背景色为例,右键Lib类的第一个节点,添加属性,选择常用属性中的BackColor属性(当然也可以自定义属性): 在Listcpp中手动添加属性页代码: 在OnDraw手动添加: 其中上图圈出部分为手动添加的代码,用于当控件被调用时打开改控件的颜色属性面板改变控件的颜色。而COLORREF col=TranslateColor(GetBackColor);这行代码实现了获取下图颜色面板的颜色并返回给col;

如何在新程序中添加控件并实时改变控件的GDI?方法:右键xxxlib文件的第一节点添加方法; 完成后在xxxCtrl.cpp文件会添加该函数,例如:void Cocx004Ctrl::myfun1(DOUBLE parag) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); if(parag>250) {

parag=0; } CDC*dc=GetDC(); CRect rec; GetClientRect(&rec); CBrush bru; CPen pen; pen.CreatePen(PS_SOLID,4,RGB(100,parag,100)); dc->SelectObject(&pen); bru.CreateSolidBrush(RGB(parag,100,100)); dc->SelectObject(&bru); dc->MoveTo(rec.left,rec.top); dc->LineTo(rec.right,rec.bottom); dc->Ellipse(&rec); ReleaseDC(dc); //TODO:在此添加调度处理程序代码 } 以上代码实现了控件的简单绘图 注:默认属性中除颜色属性外还有字体等属性,这儿未整理。

从ocx控件编写到发布到网上全过程

VC6.0从开发activex ocx控件到发布到网上全过程 (sunxiaopeng) ActiveX控件用于Web的过程是将控件嵌入主页中,用户通过浏览器访问该主页时,将主页中的控件下载,并在用户机器上注册,以后就可在用户的浏览器上运行。控件下载一次后就驻留在用户本地机器上,下次再访问相同的主页时,可不再下载该控件,而是直接运行用户本地的控件。 一:vc创建activex控件 创建一个activex控件,名称为:test.ocx,创建步骤略。显示结果如下: 为该控件增加一个方法void GetStr(LPCTSTR str), 该方法内部代码如下:

这样,GetStr方法就被加入了。 onDraw函数下代码如下 下面,测试该方法,鼠标右键控件,选择Invoke Methods,弹出如下对话框: 在parameter中输入hello,单击Invoke按钮,显示如下:

那么如何在网页中将参数传递给控件,让其在网页中显示出来呢??稍后介绍 把test.ocx控件放入c:\ceshi目录下,到网上下载Makecert.exe,Cert2Spc.exe,Signcode.exe,并一同放入c:\ceshi目录下 二:ActiveX打包与发布 1)用到的工具如下所示: 1.Makecert.exe ---证书创建工具 2.Cert2Spc.exe ---发行者证书测试工具 3.Signcode.exe ---文件签名工具 2)ActiveX发布步骤 打包activeX需要制作证书,具体用到makecert 、cert2spc 、signtool这三个工具, 现在我们将以上工具和.ocx控件放到同一个目录c:\test下. (1)单击"开始"-->"运行(R)"-->输入"cmd"-->回车-->进入到操作的控件所在的目录(需要将上面所说的工具,和ocx控件放到一个文件夹下); (2)创建inf文件,代码如下 [version] signature="$CHICAGO$" AdvancedINF=2.0 [Add.Code] test.ocx=test.ocx [test.ocx] file-win32-x86=thiscab RegisterServer=yes clsid={B649E664-D7CF-4481-A58E-AC8B4440794A} DestDir=11 FileVersion=1,0,0,1 上述代码解释如下: file-win32-x86=thiscab //告诉ie到哪里去得到这个dll,file一共包括三个部分,第一部分是file,这个永远都是这样的(至少目前来说);第二部分告诉声明支持的OS,win32表示windows,mac 就是苹果MAC OX了;第三部分是CPU类型,比如说x86、 ppc (Power PC)、 mips 或者alpha了。其中“thiscab”是一个关键字,表示 CAB 包含此 DLL,也可通过指定一条绝对或相对路径,从一个 HTTP 位置下载所需的 DLL, 例如: file-win32-x86=https://www.360docs.net/doc/7212405909.html,/mydir/NEEDED.DLL clsid={ B649E664-D7CF-4481-A58E-AC8B4440794A } //“clsid”是将要安装的控件的 CLSID ,如何获得呢------ DestDir=11

Ocx控件使用入门

Ocx控件使用入门 1基本说明 使用VS进行ocx控件开发 使用html页面进行ocx控件测试,即将ocx控件嵌入到html页面中 2使用环境 Window 7 Visual Studio 2010 中文旗舰版,即VS2010 VAssistx 3编码过程 3.1创建工程(Project) 1、启动VS2010; 2、点击“文件→新建→项目(P)…”,输入名称[activexdemo]和路径[此处为默认],点 击“确定”,打开向导对话框;

3、一直点击“下一步”,知道出现下图界面,并按照下图进行配置; 4、点击“完成”;

5、在“解决方案视图”中,选择工程,右击→属性,弹出“属性页”对话框,在对话 框中按下图进行配置,点击“确定”,返回VS2010主界面;

6、在“解决方案视图”中,找到“activexdemo.rc”,并进行下图操作; BEGIN BLOCK"StringFileInfo" BEGIN

BLOCK"040904e4" BEGIN VALUE"CompanyName", "TODO: <公司名>" VALUE"FileDescription", "TODO: <文件说明>" VALUE"FileVersion", "1.0.0.1" VALUE"InternalName", "activexdemo.ocx" VALUE"LegalCopyright", "TODO: (C) <公司名>。保留所有权利。" VALUE"OriginalFilename", "activexdemo.ocx" VALUE"ProductName", "TODO: <产品名>" VALUE"ProductVersion", "1.0.0.1" VALUE"OLESelfRegister", "" END END BLOCK"VarFileInfo" BEGIN VALUE"Translation", 0x409, 1252 END END 8、此时,工程创建成功。 3.2添加控件方法 1、在“类视图”中,按照下图方法操作; 2、点击“添加方法”后,在弹出的对话框中进行如下图配置,点击“完成”;

C#开发OCX IE控件

c# 开发Active控件 首先,建立一个WinForm控件项目MyActive,并拖入一个Lable控件,文字设为HelloWorld,如图: 此时编译项目,可以生成MyActive.dll,将些dll拷贝到IIS的虚拟根目录下,然后建立一个网页文件test.html,此网页文 件的代码如下: 测试测试 然后在IE地址栏中输入以下地址:http://localhost/mp/test.html,我们看到出现如下界面: 此时,我们的控件第一步就已经完成了! 但此时还未完在,只能在本机显示正常,如果换另一台机子就出显示一个红叉,或者弹出对话框说这个控件没有任何权限,所以必须声明这个控件必须使用赋予的权限,才可以显示出界面. 我们在AssemblyInfo.cs中引用System.Security命名空间,并添加一句[assembly : AllowPartiallyTrustedCallers()]

使用ActiveX控件用于web开发

ActiveX控件的Web开发使用注意事项 ActiveX控件经常运用于Web开发中,在最近国联项目的二次开发任务:FakeDNS+ActiveX 插件安全检查中,涉及到了部分与ActiveX插件联动与配合使用的功能。现将开发过程中遇到的部分问题与心得分享如下,以便大家在以后的工作中参考。 ActiveX是微软的东西,故而这玩意儿只有IE才支持!类似于Java的Applet 1、如何判断当前客户端是否安装相关的ActiveX控件? Js代码: try{ var obj = new ActiveXObject("SECURITYCHECKAX.SecurityCheckAXCtrl.1"); }catch(e){ alert(‘未安装插件’) } ActiveXObject中的字符串是取自插件注册后注册表中的ProgID值。如下图所示:

2、页面如何使用ActiveX插件? 在需要使用插件的页面(html或者jsp)中,添加如下代码: 注:version后面的版本号,中间的符号是, 不是. 3、如何在客户端装载插件? 本次的插件开发中,将ActiveX插件打包成了cab包和exe程序两种格式(注:插件程序在注册的时候必须设置为安全脚本)。 当页面引用了上述代码后,若客户端未安装插件,则会自动弹出安装提示信息,如下图所示: 点击右键安装后,刷新当前页面即可 采用exe插件安装包的目的:由于IE浏览器的插件安装提示是自动弹出的,不排除某些原

步步学ACTIVEX网页控件开发

步步学ACTIVEX网页控件开发 本文将首先介绍如何使用Visual Studio开发一个简单的ActiveX控件,然后介绍Ac tiveX控件开发相关的基础知识,比如方法,属性和事件等,最后介绍如何利用这些知识,实现ActiveX控件和网页页面之间的通信。 MyActiveX控件的效果图 简介 ActiveX是由Microsoft在90年代中期提出的一项技术。利用ActiveX技术,开发者可以创建像Java小程序applet一样的小型应用程序。这些应用程序可以被下载然后在M icrosoft的浏览器中运行。这篇文章是为那些想学习如何开发他们的第一个ActiveX控件的Visual C++开发者准备的。

当我自己尝试学习这些技术的时候,我发现很多针对ActiveX技术的资料都已经不再适用了,都已经过时了,或者丢失了很多关键性的信息,这些都使得我在为我的项目创建一个ActiveX控件的时候,变得困难重重。这篇文章将帮助你实现ActiveX网页控件开发的快速入门。本文将首先介绍如何使用Visual Studio开发一个简单的ActiveX控件,然后介绍ActiveX控件开发相关的基础知识,比如方法,属性和事件等,最后介绍如何利用这些知识,实现ActiveX控件和网页页面之间的通信。 另外,你也将学习到如何在默认的Internet Explorer安全设置下取消掉控件加载过程中的警告或者错误提示,使你的控件成为一个“安全”的ActiveX控件。 在本文中,我们将创建一个实际的ActiveX控件。在控件加载的过程中,它将显示一个动态的进度条,告诉用户控件正在加载并处理信息。同时,这个控件也将展示如何在Act iveX控件和Web页面之间传递信息。本文将引导你一步步地利用Microsoft Visual St udio 2005完成ActiveX控件的开发工作。 创建ActiveX控件 要创建一个ActiveX控件,首先启动Visual Studio 2005,执行下面这些步骤: 1.选择“文件”菜单,然后选择“新建”->“项目”。 2.在“新建项目”对话框中,如下图1所示,选择“Visual C++”分类下的“MFC”。然后选择“MFC ActiveX控件”作为项目模板。 3.将新项目命名为“MyActiveX”,然后选择项目的保存目录,最后点击“确定”按钮,关闭“新项目”对话框,进入“MFC ActiveX控件”向导。

VB开发ActiveX控件步骤

VB开发ActiveX控件步骤: 1、创建一个ActiveX Control的项目 2、绘制ActiveX控件的操作界面,并且编写代码 3、特别注意:在项目的属性上的Make页,有一个Version Number区域,需要你写当前控件的版本号,这个地方和自动下载有密切关系!当你远端的Web浏览器检查到本机的控件版本号和服务器上不一样的时候,浏览器就会自动从服务器下载新版本控件进行安装,所以你编译的新版本控件一定要改版本号!否则可能导致远程无法更新。 4、编译ActiveX控件 ActiveX控件打包步骤: 本例子以Studio 6.0自带的打包工具为例。 1、选择当前选用的VB ActiveX项目进行打包。 2、其中在选择Package Type的时候有3个选项: 1)Standard setup package 2)Internet Package 3)Dependency File 选择第二个! 3、到选择File Source的时候有3个选项: 1)Include in this cab 2)download from microsoft web site 3)download from alternate web site 以上选项是针对程序包含的每一个相关dll,ocx的,所以,如果你要修改参数,需要一个个文件设置! 我建议是都选择第一项!因为有些控件从外部更新,可能会遇见证书之类的问题,可能导致你的程序无法使用,因此,全部使用本地的是最省心的选择!打包过程的其他步骤,没有特别说明的,全部用默认设置! 4、在发布控件的网站根目录下建一个目录,就叫ActiveX吧,把打包装后的Package 目录中的所有文件复制到ActiveX目录。

相关主题
相关文档
最新文档