编写在浏览器中不弹出警告的ActiveX控件
我们在编写ActiveX控件时,如果用在浏览器中,经常都会弹出现在运行的脚本不安全的提示, 如果给客户使用,将会带来极大不便。按照MSDN的介绍通常有两种一种是实现IObjectSafe接口,一种是通过修改注册表的方法。一般如果用ATL开发ActiveX控件,就用实现ObjectSafe接口的方法。如果用MFC开发,我觉得还是用修改注册表的方法比较方便。下面我们将第二种方法:
要包括两个文件
1.#include "comcat.h"2.#include "Objsafe.h"// 本控件的CLSID,注册表用
1.const GUID CDECL CLSID_SafeItem =2.{ 0x7AE7497B, 0xCAD8, 0x4E66, { 0xA5,0x8B,0xDD,0xE9,0xBC,0xAF,0x6B,0x61 } };// 创建组件种类
01.HRESULT CreateComponentCategory(CATID catid, WCHAR* catDescription)02.{03.ICatRegister* pcr = NULL ;04.HRESULT hr = S_OK ;05. 06.hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,07.NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);08.if (FAILED(hr))09.return hr;10. 11.// Make sure the HKCR\Component Categories\{..catid...}12.// key is registered.13.CATEGORYINFO catinfo;14.catinfo.catid = catid;15.catinfo.lcid = 0x0409 ; // english16. 17.// Make sure the provided description is not too long.18.// Only copy the first 127 characters if it is.19.int len = wcslen(catDescription);20.if (len>127)21.len = 127;22.wcsncpy(catinfo.szDescription, catDescription, len);23.// Make sure the description is null terminated.24.catinfo.szDescription[len] = ''\0'';25. 26.hr = pcr->RegisterCategories(1, &catinfo);27.pcr->Release();28. 29.return hr;30.}// 注册组件种类
01.HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid)02.{03.// Register your component categories information.04.ICatRegister* pcr = NULL ;05.HRESULT hr = S_OK ;06.hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,07.NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);08.if (SUCCEEDED(hr))09.{10.// Register this category as being "implemented" by the class.11.CATID rgcatid[1] ;12.rgcatid[0] = catid;13.hr = pcr->RegisterClassImplCategories(clsid, 1, rgcatid);14.}15.if (pcr != NULL)16.pcr->Release();17.return hr;18.}// 卸载组件种类
01.HRESULT UnRegisterCLSIDInCategory(REFCLSID clsid, CATID catid)02.{03.ICatRegister* pcr = NULL ;04.HRESULT hr = S_OK ;05. 06.hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,07.NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);08.if (SUCCEEDED(hr))09.{10.// Unregister this category as being "implemented" by the class.11.CATID rgcatid[1] ;12.rgcatid[0] = catid;13.hr = pcr->UnRegisterClassImplCategories(clsid, 1, rgcatid);14.}15. 16.if (pcr != NULL)17.pcr->Release();18. 19.return hr;20.}// DllRegisterServer - Adds entries to the system registry
01.STDAPI DllRegisterServer(void)02.{03.HRESULT hr;04. 05.AFX_MANAGE_STATE(_afxModuleAddrThis);06. 07.if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))08.return ResultFromScode(SELFREG_E_TYPELIB);09. 10.if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))11.return ResultFromScode(SELFREG_E_CLASS);12. 13.// 标记控件初始化安全.14.// 创建初始化安全组件种类15.hr = CreateComponentCategory(CATID_SafeForInitializing, L"Controls safely initializable from persistent data!");16.if (FAILED(hr))17.return hr;18.// 注册初始化安全19.hr = RegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForInitializing);20.if (FAILED(hr))21.return hr;22. 23.// 标记控件脚本安全24.// 创建脚本安全组件种类25.hr = CreateComponentCategory(CATID_SafeForScripting, L"Controls safely scriptable!");26.if (FAILED(hr))27.return hr;28.// 注册脚本安全组件种类29.hr = RegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForScripting);30.if (FAILED(hr))31.return hr;32. 33.return NOERROR;34.}// DllUnregisterServer - Removes entries from the system registry
01.STDAPI DllUnregisterServer(void)02.{03.HRESULT hr;04. 05.AFX_MANAGE_STATE(_afxModuleAddrThis);06. 07.if (!AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor))08.return ResultFromScode(SELFREG_E_TYPELIB);09. 10.if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))11.return ResultFromScode(SELFREG_E_CLASS);12. 13.// 删除控件初始化安全入口.14.hr=UnRegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForInitializing);15.if (FAILED(hr))16.return hr;17.// 删除控件脚本安全入口18.hr=UnRegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForScripting);19.if (FAILED(hr))20.return hr;21. 22.//////////////////////////23.return NOERROR;24.}(全文完)
from:http://www.vckbase.com/index.php/wv/526
编写在浏览器中不弹出警告的ActiveX控件的更多相关文章
- 20160513--js 弹出窗口带有iframe控件 备忘
需要引用JQuery. /*! * 主 题:<页面弹出窗口> * 说 明:用于页面弹出的窗口. * 功能描述: * 1.生成弹出窗口,窗口内包括iframe控件: * 2.窗口弹出时,生成 ...
- winfrom弹出窗口用timer控件控制倒计时20秒后关闭
功能描述: 因为在程序退出时需要确认是否是误操作,所以加了密码输入的子窗体,子窗体在20秒内会自动关闭 代码如下: private int count; private void Form2_Load ...
- 使你的ActiveX控件执行时不弹出安全性提示(转载)
我们编写一个ActiveX控件在IE中运行,一般会弹出一个安全提示,如何避免这种情况?下面是我在参考前人的文章后,总结出“在浏览器中执行时不弹出警告的ActiveX控件”的两种编写方法,予以备忘.注意 ...
- ocx控件避免弹出警告的类--2
本文与 OCX控件避免弹出安全警告的类 http://www.cnblogs.com/lidabo/archive/2013/03/26/2981852.html 有些类似,只不过增加了几行代码(红色 ...
- Delphi 编写ActiveX控件(OCX控件)的知识和样例(有详细步骤)
一.ActiveX应用情况简介: ActiveX控件也就是一般所说的OCX控件,它是 ActiveX技术的一部分.ActiveX是微软公司推出的基于组件对象模型COM的技术,包括对Windows 32 ...
- ActiveX控件打包成Cab实现浏览器自动下载安装
前言 我们在浏览器中使用我们自己的一些OCX,或者是DLL这一类的文件,在X86的机器上需要我们手动将这些文件拷贝到Windows/System32 文件夹下面去,然后通过Dos命令regsvr32 ...
- 手机浏览器浏览WebApp弹出的键盘遮盖住文本框的解决办法
手机浏览器浏览WebApp弹出的键盘遮盖住文本框的解决办法 最近碰到Android微信内置浏览H5页面,因为其中的文本输入框(input)放置在靠近页面的中下方,点击文本框以后,则输入框会被弹出的手机 ...
- 【2017-05-02】winform弹出警告框是否进行增删改操作、记事本制作、对话框控件和输出输入流
一.winform弹出警告框是否进行增删改操作 第一个参数是弹出窗体显示的内容,第二个参数是标题,第三个参数是该弹窗包含确定和取消按钮. 返回的是一个枚举类接收一下. 再进行判断,如果点的是确定按钮, ...
- 【2017-05-02】winform弹出警告框选择性操作、记事本制作、对话框控件和输入输出流
一.winform弹出警告框选择性操作 MessageBox.Show()返回一个枚举类值(第一个参数为弹出窗口显示的内容,第二个参数为弹出窗口的标题,第三个参数为弹出窗口包含的按钮) 先新建一个变量 ...
随机推荐
- HTML5 上播放视频格式兼容性
视频格式 当前,video 元素支持三种视频格式: 格式 IE Firefox Opera Chrome Safari Ogg No 3.5+ 10.5+ 5.0+ No MPEG 4 9.0+ No ...
- c++空指针调用类成员函数
最近在看C++动态绑定问题时(理解静态绑定时)发现的问题:能用空指针调用类的成员函数(gcc,vs2013下都可以). 例子: class animal { public: void sleep(){ ...
- BZOJ 2795: [Poi2012]A Horrible Poem( hash )
...字符串hash. 假如长度x是一个循环节, 那么对于任意n(x | n)也是一个循环节. 设当前询问区间[l, r]长度为len = ∏piai, 最终答案ans = ∏piai' ,我们只需枚 ...
- Python 第八篇:异常处理、Socket语法、SocketServer实现多并发、进程和线程、线程锁、GIL、Event、信号量、进程间通讯
本节内容: 异常处理.Socket语法.SocketServer实现多并发.进程和线程.线程锁.GIL.Event.信号量.进程间通讯.生产者消费者模型.队列Queue.multiprocess实例 ...
- SED修改指定行
一个文件:cat aa #如果第三行是5的话将改为8,很明显第三行是5所以 结果改变 [root@remote ~]# sed -e '3s/5/8/' aa [root@remote ~]# #如果 ...
- 演练5-6:Contoso大学校园管理系统6
在上一次的教程中,我们处理了关联数据问题.这个教程演示如何处理并发问题.你将使用Department实体创建一个页面,这个页面在支持编辑和删除的同时,还可以处理并发错误.下面的截图演示了Index页面 ...
- 圣魔大战3(Castle Fantisia)艾伦希亚战记完美攻略
作为城堡幻想曲系列续作,艾伦希亚战记继承了前作的战棋+养成模式进行游戏. (城堡幻想曲3,纠正大家个错误哦,不是圣魔大战3,圣魔大战是城堡幻想曲2,圣魔大战不是个系列,艾伦西亚战记==艾伦希亚战记,一 ...
- c语言,结构体里面的函数
以linux-3.2内核代码为例,结构体里面的函数的用法: 例,在某驱动文件中,定义了一个平台设备驱动: static struct platform_driver s3c24xx_led_drive ...
- ADO.NET 操作数据库 --- 01 简单封装
由于我是Java转的C#开始的时候就用的NHihernate,和EF 对ADO.NET使用较少,现在封装一个ADO.NET的工具类来实现数据库的操作,比较简单,望大家多多提意见. 如果大家有什么学习中 ...
- windows/linuxjdk安装,jdk1.6升级到1.7
一.JDK: JAVA_HOME: C:\Program Files\Java\jdk1.7.0_79 PATH: ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin CLASS ...