您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页浏览器插件之C

浏览器插件之C

来源:化拓教育网


浏览器插件之C#开发\"ActiveX\"(一)

一、 搜罗的知识

网页本身的功能是有限的,要想实现一些网页本身不支持的功能,比如:网页上的p2p视频播放,就得靠ActiveX这种技术了。ActiveX控件以前也叫做OLE控件或OCX控件,它是一些软件组件或对象,可以将其插入到WEB网页或其它应用程序中。使用ActiveX插件,可以轻松方便的在 Web页中插入多媒体效果、交互式对象以及复杂程序等等。

通常使用C++或VB开发ActiveX控件,

严格意义上讲,c#是不能生成纯正ocx控件的,在vs.net中也没有专门的\"ActiveX项目\"新建项,最多也只就能新建\"类库\"得到一个dll而非ocx(因此我们也无法用传统的regsvr32来注册该dll),但是c#能开发com组件,activeX控件本质上讲跟com是一类技术,所以用c#开发\"能够让网页调用的com类库\"还是可行的。

二、开发的步骤

综述:本文讲述下在Visual Studio 2005环境中使用C#开发\"ActiveX\"控件并在网页中调用的过程,最后阐述如何对浏览器中嵌入的ActiveX控件在VS启用调试。PS:仅限IE浏览器

第一步新建Windows控件库

添加一个PictureBox控件和一个按钮,并为按钮点击事件和类库加载事件分别添加处理函数,如下

private void button1_Click(object sender, EventArgs e) {

MessageBox.Show(Properties.Resources.Str1,Properties.Resources.Str2,MessageBoxButtons.OK,MessageBoxIcon.Information); }

private void UserControl1_Load(object sender, EventArgs e) {

pictureBox1.Image = Properties.Resources.科比; }

第二步设置类库一些属性

2.1在解决方案导航栏右键工程选择属性,点击“应用程序”选项卡-程序集信息..-勾选使程序集COM可见,如图

2.2点击”生成“选项卡-勾选为COM Interop注册,如图

2.3在Assembly.cs中添加属性代码

//允许部分受信任的代码调用具有强名称的程序集。如果没有此声明,则只有完全受信任的调用方才可以使用这类程序集

[assembly:System.Security.AllowPartiallyTrustedCallers()]

2.4在UserControl1.cs文件里类声明前命名空间下添加全球唯一标识属性代码,这个GUID用于在网页标签元素中作为ID使用的

[Guid(\"9A15E63F-1761-4f99-B740-512AD1C63D7E\")]---(自己生成GUID) 如下图

第四步 生成项目DLL,成功后。用OLE/COM Object Viewer查看,

依次展开Objects Classes-All Objects,就会看到刚才的DLL已经注册成COM。 右键A.SHIJIERUCIMEIHAO.UserControl1节点选择COPY HTML 到剪贴板,复制得到的用于在网页标签元素中作为ID使用(如果2.4步添加了自己生成的GUID,则用这个是一样),把此ID信息保存起来,待后面步骤使用

如下图

好,ActiveX已经准备好了,下面搞个HTML试试呗。 第五步 建立网页插入刚刚生成好的的控件

就在A_SHIJIERUCIMEIHAO.dll所在debug目录建立一个TEST.html,用记事本打开填入

我要睡觉了

下面是嵌入的ActiveX控件哦
classid=\"clsid:9A15E63F-1761-4f99-B740-512AD1C63D7E\" >

保存后,双击打开网页 网页下方提示 浏览器已运行脚本及ActiveX控件,点击运行(有可能上方拉窗帘出现,此时右键允许即可),如下图

最后是运行效果图 :

好,先记到这,待续

打开网页成功后,但如果想调试这个嵌入的控件,该怎么办呢? 若要调试C#开发的\"ActiveX\"控件,必须制定一个容器(可执行文件)用于运行控件,有两种方法,一种是使用VS自带的容器进行调试,一种是使用实际的生产环境来调试。这里控件是嵌入到网页中的,所以不能使用VS自带容器调试。

一。在\"解决方案资源管理器中\"选择项目,右键查看\"属性\点击\"调试\"选项卡,

在启动外部程序中填入当前系统IE浏览器安装目录中的IE可执行文件路径,

如C:\\Program Files\\Internet Explorer\\iexplore.exe, 然后再在命令行参数文本框填入刚才建立的html路径, 如D:\\Documents\\Visual Studio

2005\\Projects\\A_SHIJIERUCIMEIHAO\\A_SHIJIERUCIMEIHAO\\bin\\Debug\\Test.html 如下图所示

二.修改注册表信息

一开始我以为这样启动程序就可以调试了,没想到让我伤心了,后来网上查了一下,有了解决办法。。。。。。。

默认情况下,为了防止程序崩溃,IE会启动2个进程。把IE作为ActiveX的调试程序是无法进行调试,可以通过 在注册表

HKEY_CURRENT_USER\\Software\\Microsoft\\InternetExplorer\\Main 下新建一个名为“TabProcGrowth” 的DWORD值,把值设为0,便可以阻止IE创建多个进程,这样,就可以很方便的进行调试了。 为方便直接添加以下文本至reg文件后双击即可完成 Windows Registry EditorVersion 5.00

[HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\Main]

@=\"Default项的文本\"

“ TabProcGrowth “=dword:00000000。

最后启动调试,在按钮单击处理事件打断点,在网页点击按钮,就可以调试了

吖,世界如此美好!

后言:

在另一台非开发环境电脑上使用刚才做的东西。

把A_SHIJIERUCIMEIHAO.dll和Test.html拷贝到新机器上,用命令注册RegAsm.exe A_SHIJIERUCIMEIHAO.dll (相当于前一篇的2.2步骤)

结果事不如意,打开网页无法看到嵌入的控件,然后用OLE/COM 浏览器,展开相应节点时查看也出现下面的问题„

网上搜索了一下,可以这样解决:

用RegAsm.exe注册时带参数/codebase ,或者用全局程序集缓存工具Gacutil.exe安装dll到GAC中。

RegAsm.exe A_SHIJIERUCIMEIHAO.dll /codebase OLE/COM查看可以展开节点了

打开网页也可以看到结果了

一些经验:

通常在获取当前dll路径时是通过Application .StartupPath来获取(启动程序与相关类库dll一般在同一个文件夹),但是这里使用此方法获取得到的却是ie浏览器可执行文件路径,事与愿违,用如下代码来达到一样的目的。

System.IO.Path.GetDirectoryName(Assembly.GetAssembly(this.GetType()).Location);

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务