VC编写浏览器中不弹出警告的ActiveX控件
来源:互联网 发布:软件开发找工作 编辑:程序博客网 时间:2024/05/21 11:00
我们在编写ActiveX控件时,如果用在浏览器中,经常都会弹出现在运行的脚本不安全的提示, 如果给客户使用,将会带来极大不便。按照MSDN的介绍通常有两种一种是实现IObjectSafe接口,一种是通过修改注册表的方法。一般如果用ATL开发ActiveX控件,就用实现ObjectSafe接口的方法。如果用MFC开发,我觉得还是用修改注册表的方法比较方便。下面我们将第二种方法:
要包括两个文件
#include "comcat.h"#include "Objsafe.h"
// 本控件的CLSID,注册表用
const GUID CDECL CLSID_SafeItem ={ 0x7AE7497B, 0xCAD8, 0x4E66, { 0xA5,0x8B,0xDD,0xE9,0xBC,0xAF,0x6B,0x61 } };
// 创建组件种类
HRESULT CreateComponentCategory(CATID catid, WCHAR* 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; // Make sure the HKCR/Component Categories/{..catid...} // key is registered. CATEGORYINFO catinfo; catinfo.catid = catid; catinfo.lcid = 0x0409 ; // english // Make sure the provided description is not too long. // Only copy the first 127 characters if it is. int len = wcslen(catDescription); if (len>127) len = 127; wcsncpy(catinfo.szDescription, catDescription, len); // Make sure the description is null terminated. catinfo.szDescription[len] = ''/0''; hr = pcr->RegisterCategories(1, &catinfo); pcr->Release(); return hr;}
// 注册组件种类
HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid){ // Register your component categories information. ICatRegister* pcr = NULL ; HRESULT hr = S_OK ; hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr); if (SUCCEEDED(hr)) { // Register this category as being "implemented" by the class. CATID rgcatid[1] ; rgcatid[0] = catid; hr = pcr->RegisterClassImplCategories(clsid, 1, rgcatid); } if (pcr != NULL) pcr->Release(); return hr;}
// 卸载组件种类
HRESULT UnRegisterCLSIDInCategory(REFCLSID clsid, CATID catid){ ICatRegister* pcr = NULL ; HRESULT hr = S_OK ; hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr); if (SUCCEEDED(hr)) { // Unregister this category as being "implemented" by the class. CATID rgcatid[1] ; rgcatid[0] = catid; hr = pcr->UnRegisterClassImplCategories(clsid, 1, rgcatid); } if (pcr != NULL) pcr->Release(); return hr;}
// DllRegisterServer - Adds entries to the system registry
STDAPI DllRegisterServer(void){HRESULT hr;AFX_MANAGE_STATE(_afxModuleAddrThis);if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))return ResultFromScode(SELFREG_E_TYPELIB);if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))return ResultFromScode(SELFREG_E_CLASS); // 标记控件初始化安全. // 创建初始化安全组件种类 hr = CreateComponentCategory(CATID_SafeForInitializing, L"Controls safely initializable from persistent data!"); if (FAILED(hr)) return hr; // 注册初始化安全 hr = RegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForInitializing); if (FAILED(hr)) return hr; // 标记控件脚本安全 // 创建脚本安全组件种类 hr = CreateComponentCategory(CATID_SafeForScripting, L"Controls safely scriptable!"); if (FAILED(hr)) return hr; // 注册脚本安全组件种类 hr = RegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForScripting); if (FAILED(hr)) return hr;return NOERROR;}
// DllUnregisterServer - Removes entries from the system registry
STDAPI DllUnregisterServer(void){HRESULT hr;AFX_MANAGE_STATE(_afxModuleAddrThis);if (!AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor))return ResultFromScode(SELFREG_E_TYPELIB);if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))return ResultFromScode(SELFREG_E_CLASS); // 删除控件初始化安全入口. hr=UnRegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForInitializing); if (FAILED(hr)) return hr; // 删除控件脚本安全入口 hr=UnRegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForScripting); if (FAILED(hr)) return hr;//////////////////////////return NOERROR;}
- VC编写浏览器中不弹出警告的ActiveX控件
- 编写在浏览器中不弹出警告的ActiveX控件
- 编写浏览器不弹出警告的ActiveX控件
- 编写浏览器不弹出警告的ActiveX控件
- 编写浏览器不弹出警告的ActiveX控件
- 编写浏览器不弹出警告的ActiveX控件
- VC++编写ActiveX控件
- VC++编写ActiveX控件
- VC++编写ActiveX控件
- VC++编写ActiveX控件
- VC++编写ActiveX控件
- VC++编写ActiveX控件
- VC++编写ActiveX控件
- VC++编写ActiveX控件
- VC++编写ActiveX控件
- VC++编写ActiveX控件
- VC++编写ActiveX控件
- VC++编写ActiveX控件 (学习)
- VB选项卡SSTAB属性及参数
- ASP.NET批量生成静态页面
- 进程和线程
- VBA获取您的电脑硬件信息
- 关于问题vxworks与linux区别
- VC编写浏览器中不弹出警告的ActiveX控件
- Microsoft 70-442 最新题库分享
- 滚动条的编程
- 静态JS树
- 【魅力⑩班荣誉出品】——《炮炮兵大战海贼王》
- 在openSUSE11.1上安装和配置LAMP(Apache/MySQL/PHP)
- 细品RibbonX(21):toggleButton控件详解
- 例解基于UML的面向对象分析与设计
- 企业工作流管理