资源描述:
《使你的Active_控件执行时不弹出安全性提示.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、我们编写一个ActiveX控件在IE中运行,一般会弹出一个安全提示,如何避免这种情况?下面是我在参考前人的文章后,总结出“在浏览器中执行时不弹出警告的ActiveX控件”的两种编写方法,予以备忘。注意,这里不会弹出警告是说在执行时不会弹出,也就是说已经安装了这个ActiveX控件。如果要下载安装这个ActiveX控件时不会弹出安全警告,恐怕就得去买数字证书了。不过即使有数字证书,还是得用户同意后才会下载安装。以下两种方法在WINXP-SP2+VC6下通过。方法1:修改注册表可能你在看完下面的过程后会发现,程序没有一个地方对注册表操作过。其
2、实不然,这里所谓的修改注册表的方法就是使用组件类型管理器(ComponentCategoriesManager)创建一个正确的入口到系统注册表。IE通过检测注册表判断一个控件是否可以安全地初始化和脚本操作。IE会通过调用ICatInformation::IsClassOfCategories方法确定控件是否支持给出的安全性分组。其中对注册表的操作都已经封装起来,隐藏在底层了,所以看不到。必须包括两个头文件#include#includeconstGUIDCDECLCLSID_SafeItem={0
3、xD321B11E,0x8E79,0x4829,0xAB,0x80,0x9E,0x59,0x92,0x06,0xAB,0xB7};//用你的控件类GUID替换//注册组件种类为安全HRESULTAddCategorySafty(CATIDcatid,TCHAR*catDescription){ ICatRegister*pcr=NULL; HRESULThr=S_OK; hr=CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL,CLSCTX_INPROC_SERVER
4、,IID_ICatRegister,(void**)&pcr); if(FAILED(hr)) returnhr; CATEGORYINFOcatinfo; catinfo.catid=catid; catinfo.lcid=0x0409;//英语语言 //最长只拷贝127个字符。 intlen=lstrlen(catDescription);if(len>127){ len=127;} lstrcpyn((TCHAR*)(catinfo.szDescription),catDescription
5、,len+1); hr=pcr->RegisterCategories(1,&catinfo);pcr->Release(); returnhr;}//移除已经注册为安全的组件种类HRESULTRemoveCategorySafty(CATIDcatid){ ICatRegister*pcr=NULL; HRESULThr=S_OK; hr=CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL,CLSCTX_INPROC_SERVER,IID_ICatRegis
6、ter,(void**)&pcr); if(FAILED(hr)) returnhr; hr=pcr->UnRegisterCategories(1,&catid);pcr->Release(); returnhr;}//把你的控件注册到已经注册为安全的组件种类HRESULTRegisterCLSIDInCategory(REFCLSIDclsid,CATIDcatid){ ICatRegister*pcr=NULL; HRESULThr=S_OK; hr=CoCreateInstance(CLSID_
7、StdComponentCategoriesMgr, NULL,CLSCTX_INPROC_SERVER,IID_ICatRegister,(void**)&pcr); if(SUCCEEDED(hr)) { CATIDrgcatid[1]; rgcatid[0]=catid; hr=pcr->RegisterClassImplCategories(clsid,1,rgcatid); } if(pcr!=NULL) pcr->Release(); returnhr;}//把你的控件从安全组件种类移除
8、HRESULTUnRegisterCLSIDInCategory(REFCLSIDclsid,CATIDcatid){ ICatRegister*pcr=NULL; HRESULThr