2024年3月28日发(作者:)
使你的ActiveX控件执行时不弹
出安全性提示
我们编写一个ActiveX控件在IE中运行,一般会弹出一个安全提示,如何避免
这种情况?下面是我在参考前人的文章后,总结出“在浏览器中执行时不弹出
警告的ActiveX控件”的两种编写方法,予以备忘。注意,这里不会弹出警告
是说在执行时不会弹出,也就是说已经安装了这个ActiveX控件。如果要下载
安装这个ActiveX控件时不会弹出安全警告,恐怕就得去买数字证书了。不过
即使有数字证书,还是得用户同意后才会下载安装。
以下两种方法在WINXP-SP2+VC6下通过。
方法1:修改注册表
可能你在看完下面的过程后会发现,程序没有一个地方对注册表操作过。其实
不然,这里所谓的修改注册表的方法就是使用组件类型管理器(Component
Categories Manager)创建一个正确的入口到系统注册表。IE通过检测注册表判
断一个控件是否可以安全地初始化和脚本操作。IE会通过调用
ICatInformation::IsClassOfCategories 方法确定控件是否支持给出的安全
性分组。其中对注册表的操作都已经封装起来,隐藏在底层了,所以看不到。
必须包括两个头文件
#include
#include
const GUID CDECL CLSID_SafeItem =
{0xD321B11E, 0x8E79, 0x4829, 0xAB, 0x80, 0x9E, 0x59, 0x92, 0x06, 0xAB,
0xB7};//用你的控件类GUID替换
// 注册组件种类为安全
HRESULT AddCategorySafty(CATID catid, TCHAR* catDescription)
{
ICatRegister* pcr = NULL ;
HRESULT hr = S_OK ;
hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);
if (FAILED(hr))
return hr;
CATEGORYINFO catinfo;
= catid;
= 0x0409 ; // 英语语言
// 最长只拷贝127个字符。
int len = lstrlen(catDescription);
if (len > 127)
发布评论