VC6.0编写IE可运行的ActiveX,增加安全检测项,不支持64位浏览器
来源:互联网 发布:金越软件招聘 编辑:程序博客网 时间:2024/06/01 13:49
综合网络上提供的方法,这个是比较全的App类的实现。
注册控件后,网页中访问时不再提示安全警告,也不必修改ie默认的安全级别。
// IDCardReader.cpp : Implementation of CIDCardReaderApp and DLL registration.
#include "stdafx.h"
#include "IDCardReader.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "Cathelp.h"
#include "objsafe.h"
#include "comcat.h" //CATID 的定义在这个控件里,很重要这个头文件
CIDCardReaderApp NEAR theApp;
const GUID CDECL BASED_CODE _tlid =
{ 0xb49cfb44, 0x5166, 0x49a1, { 0xb9, 0x68, 0x3e, 0x8a, 0x2d, 0x79, 0x22, 0xa1 } };
const WORD _wVerMajor = 1;
const WORD _wVerMinor = 0;
//以下是安全接口标识,必须与控件的ID相同
const GUID CDECL CLSID_SafeItem ={0x10946843, 0x7507, 0x44fe, {0xac, 0xe8, 0x2b, 0x34, 0x83, 0xd1, 0x79, 0xb7}};
/*
根据msdn的提示要定义这两项,其实是vc6.0以下的版本,vc6 引入 comcat.h 即可
const CATID CATID_SafeForScripting={0x7dd95801,0x9882,0x11cf,{0x9f,0xa9,0x00,0xaa,0x00,0x6c,0x42,0xc4}};
const CATID CATID_SafeForInitializing= { 0xb49cfb44, 0x5166, 0x49a1, { 0xb9, 0x68, 0x3e, 0x8a, 0x2d, 0x79, 0x22, 0xa1 } };
*/
////////////////////////////////////////////////////////////////////////////
// CIDCardReaderApp::InitInstance - DLL initialization
BOOL CIDCardReaderApp::InitInstance()
{
BOOL bInit = COleControlModule::InitInstance();
if (bInit)
{
// TODO: Add your own module initialization code here.
}
return bInit;
}
////////////////////////////////////////////////////////////////////////////
// CIDCardReaderApp::ExitInstance - DLL termination
int CIDCardReaderApp::ExitInstance()
{
// TODO: Add your own module termination code here.
return COleControlModule::ExitInstance();
}
/////////////////////////////////////////////////////////////////////////////
//<--新增内容
// 创建组件种类
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)
{
AFX_MANAGE_STATE(_afxModuleAddrThis);
if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))
return ResultFromScode(SELFREG_E_TYPELIB);
if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))
return ResultFromScode(SELFREG_E_CLASS);
//<--新增内容
HRESULT hr = S_OK;
// 标记控件初始化安全.
// 创建初始化安全组件种类
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)
{
AFX_MANAGE_STATE(_afxModuleAddrThis);
if (!AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor))
return ResultFromScode(SELFREG_E_TYPELIB);
if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))
return ResultFromScode(SELFREG_E_CLASS);
return NOERROR;
}
0 0
- VC6.0编写IE可运行的ActiveX,增加安全检测项,不支持64位浏览器
- vc6.0制作窗体可嵌入IE内的OCX
- MFC工程环境下,制作Activex ocx取消IE浏览器的安全提示
- IE的安全设置中设成“启用,运行,下载activeX控件”程序控制的实现的原理
- 如何将标记为可安全编写脚本和初始化的 MFC ActiveX 控件
- 如何将标记为可安全编写脚本和初始化的 MFC ActiveX 控件 (转)
- 修正VC6.0 ACTIVEX 直接运行不能调用Activex Control Test Container 的问题
- 编写IE的ActiveX控件 (基础篇)
- 360安全浏览器不支持的属性
- win7 64位 想用VC6.0 ActiveX控件,但是没有Register Active解决办法
- VC6 破解Windows登录密码(不支持64位)
- VC6.0下开发的程序在64位机器上运行
- 解决问题:阻止ie浏览器总是显示“脚本通常是安全的,是否允许运行脚本”
- VC6.0的ActiveX控件实现
- VC6.0的ActiveX控件实现
- VC6.0的ActiveX控件实现
- activex控件在IE中弹出安全警告的解决办法- -
- IE浏览器不支持JSON.parse
- HDOJ Just Random 4790【2013成都区域赛J题+等差数列优化】
- js 获取访问链接参数
- 如果让我重新设计一款Android App
- HDU 1203 I NEED A OFFER!
- KindEditor保留htmltag,以及关闭html过滤
- VC6.0编写IE可运行的ActiveX,增加安全检测项,不支持64位浏览器
- 3D打印机切片引擎Cura分析<二>记一个小软件
- HDOJ 1000 1001丶
- 权利指数(hdu 1557)
- 【leetcode】Valid Palindrome
- Hadoop的text通过set(Text t)或set(String s),getLength与getBytes().length的值可能不同的原因
- Leetcode #74 Search a 2D Matrix
- js 弹出alert框
- ajax请求跨域问题-通过jsonp方式解决