由于项目需要检测客户端的硬件和网速配置,因此要写个ActiveX插件,首先感谢红马天下的文章《用C#编写ActiveX控件》给我的帮助。
 经过大家努力,最后实现效果如下:

实现细节我就不多说了,关键说几个要注意的地方:
 1、建立ActiveX组件项目是通过VS建立window控件库项目来建的;
 2、项目属性中的“生成”选项卡要把为COM Interop注册选框勾选;
 3、“AssemblyInfo.cs”文件中的“[assembly: ComVisible(false)]”要设为true;
 4、在控件类上要注明GUID,方便以后object中classid的调用

[Guid("6BE98CB0-EA85-4bcb-B1FD-5FF0130DEB48")]
public partial class DiagnoseDataList : UserControl
{

}

生成的dll放入web项目bin目录
在HTML中如下调用

<object id="CheckClientConfig" classid="clsid:6BE98CB0-EA85-4bcb-B1FD-5FF0130DEB48" codebase="bin\SelfDiagnoseActiveX.dll">
        <param name="BrowserVersion" id="BrowserVersion" value="<%=this.GetBrowserVersion() %>" />
        <param name="MajorVersion" id="MajorVersion" value="<%=this.GetBrowserMajorVersion() %>" />
        <param name="BrowserVersionType" id="BrowserVersionType" value="<%=this.GetBrowserVersionType() %>" />
        <param name="WebServiceUrl" id="WebServiceUrl" value="<%=this.GetWebServiceUrl() %>" />
        <param name="DownLoadFile" id="DownLoadFile" value="<%=this.GetDownLoadFile() %>" />
        <param name="UpLoadFile" id="UpLoadFile" value="<%=this.GetUplLoadFile() %>" />
        <param name="SiteID" id="SiteID" value="<%=this.GetSiteID() %>" />
        <param name="LanguageXML" id="LanguageXML" value="<%=this.GetActiveLanguage() %>" />
    </object>

通过param把相关的属性传入object组件

但是发布后出现了问题,每当关闭浏览器,都会不断弹出如下对话框

而且经测试,弹出次数与组件内控件的数量成正比。

网上查找后,有文章说是由于ActiveX组件资源未释放,然后给出如下代码

protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

但是这代码是在创建的时候自动生成的,应该不会有问题啊。

我突然想到,难道页面关闭未触发Dispose方法?
于是我在组件中写了如下方法,手动调用

public void CloseControl()
{
      this.Dispose();
}

然而在HTML中调用又出了问题,在button中直接写在onclick事件中是可以的

<input type="button" value="释放" onclick="CheckClientConfig.CloseControl();" />

先点击释放了组件再关闭页面是有效的,但是总不能让客户每次关浏览器都要先点下button吧,这是不现实的

然后经过网上查找,找到了如下方法
用javascript重新定义 window.onbeforeunload()  事件

function  window.onbeforeunload()  
{       
   CheckClientConfig.CloseControl();
}

这个方法很好,无论是直接“ALT+F4”关闭,还是直接点右上角的关闭按钮,都能捕捉到。(这个问题是我一直想解决的,终于被我找到了,嘿嘿)

然而,直接这样调用JS会报CheckClientConfig未定义的错误,和直接写在button中不一样,这里会报错,报着试试看的心里测试了下如下代码

function  window.onbeforeunload()  
{  
   var obj = window.document.getElementById("CheckClientConfig");
   if (obj)
   {        
      obj.CloseControl();
   }
}

居然成功了,不可思议,如果哪位老大知道什么原因,请指教一二。

最后功能实现,嘿嘿

转载于:https://www.cnblogs.com/treeyh/archive/2007/12/28/1018409.html

【原】关于ActiveX插件小项目总结相关推荐

  1. python小项目实例流程-Python小项目:快速开发出一个简单的学生管理系统

    原标题:Python小项目:快速开发出一个简单的学生管理系统 本文根据实际项目中的一部分api 设计抽象出来,实例化成一个简单小例子,暂且叫作「学生管理系统」. 这个系统主要完成下面增删改查的功能: ...

  2. IE添加可信任站点,启用ActiveX插件批处理

    I添加可信任站点IP地址为:192.168.1.108,启用ActiveX插件执行以下批处理命令: reg add "HKCU\Software\Microsoft\Windows\Curr ...

  3. .net如何自制ActiveX插件并运行在IE浏览器上

    前言 本篇博客是的起因是我们项目组的帅行和靖凡大人都研究出了自制插件,小僧在学习他们的博客时,发现亲手实践还是有些细小的方面需要特别注意.作为傻瓜教程的极力拥护者,学习后自己写一篇博客不用想也必是极好 ...

  4. python小项目案例-Python小项目:快速开发出一个简单的学生管理系统

    本文根据实际项目中的一部分api 设计抽象出来,实例化成一个简单小例子,暂且叫作「学生管理系统」. 这个系统主要完成下面增删改查的功能: 包括: 学校信息的管理 教师信息的管理 学生信息的管理 根据A ...

  5. python小项目案例-拯救Python新手的几个项目实战

    原标题:拯救Python新手的几个项目实战 Python 做小游戏 实例一:24点游戏 项目名称:经典趣味24点游戏程序设计(python) 实例二:五子棋游戏 python学习关注我们企鹅qun: ...

  6. 什么是ActiveX插件

    根据微软权威的软件开发指南MSDN(Microsoft Developer Network)的定义,ActiveX插件以前也叫做OLE控件或OCX控件,它是一些软件组件或对象,可以将其插入到WEB网页 ...

  7. 0301 - 一个比价的小项目

    这两天帮朋友做了个 比价 的小项目,主要是为了练手 Vue 及相关网站开发. 主要功能: 批量查询产品对应的京东价格 手动根据京东价格调整批发价格 将产品及价格信息,以网页形式分享出去 由于是私人项目 ...

  8. Java web小项目_个人主页(1)—— 云环境搭建与项目部署

    摘自:Java web小项目_个人主页(1)-- 云环境搭建与项目部署 作者:丶PURSUING 发布时间: 2021-03-26 23:59:39 网址:https://blog.csdn.net/ ...

  9. jbpm小项目测试_尝试使用jBPM Console NG(测试版)

    jbpm小项目测试 大家好! 这是有关jBPM Console NG的另一篇文章. 经过6个月的辛苦工作,我很高兴为开发人员社区撰写这篇文章,以进行尝试. 在这篇文章中,我将解释如何从源代码构建应用程 ...

最新文章

  1. nyoj 234 吃土豆
  2. 企业网络推广——企业网络推广专员提高网站更新讲策略
  3. ASP字符串函数大全
  4. 优先级调度算法(C++实现)
  5. python求函数极值_python 遗传算法求函数极值的实现代码
  6. python cv.imread_Python的OpenCV cv2.imread总是返回None而cvFeatDetector崩溃了python
  7. notepad++ 使用去掉自动检查红线
  8. 4-2017-12-2-2约瑟夫环
  9. your system apperars to have shutdown uncleanly
  10. Atitit attilax在自然语言处理领域的成果
  11. RecyclerView使用中遇到的问题
  12. 计算机科学导论第五版第二章答案,(计算机科学导论第2章答案.docx
  13. c# DevExpress Gridview 设置表格背景颜色
  14. 基于因子分析法分析新冠肺炎疫情对房地产业上市公司财务的影响
  15. 计算机单片机考试作弊检讨书,考试作弊检讨书2000字5篇
  16. 哈里王子与魔兽圣骑士(Paladin)
  17. 遇到的面试题基础知识
  18. op 消除 消除自激振荡
  19. 游戏设计艺术(第3版) The Art of Game Design 看评论
  20. 书评与摘抄《如何阅读一本书》

热门文章

  1. 微信小程序开发:学习笔记[8]——页面跳转及传参
  2. 【转】SSL/TLS/WTLS协议原理
  3. MVC数据的注册及验证简单总结
  4. objective-c 通过类名实例化类
  5. consul使用的一些见解
  6. 0048-三角形的判断
  7. 【Python】单元测试框架unitest及其高级应用
  8. IoT Architecture
  9. Android—常用组件练习
  10. C#操作Excel的OLEDB方式与COM方式比较