浏览 227 次
|
该帖已经被评为新手帖
|
|
|---|---|
| 作者 | 正文 |
|
时间:2008-05-09 关键字: activex
各位好:
最近我做一个web打印功能,要求能在客户端实现打印,我调用了ie自带的打印控建,但打印中会有页眉和页尾,这是我不需要的,于是我使用js创建activex修改了打印的注册表,功能实现了,但在调试中发现ie会自动的禁止activex的运行,我在网上查找了一些资料,据说这种操作是安全的,但我公司的网中是完全不行的,我想请问各位有没有能用代码实现能力不让ie拒绝我的操作,谢谢!!! 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2008-05-09
你的控件必须在注册时标记实现“控件初始化安全”和“脚本安全”俩个接口。
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"初始化安全!");
if (FAILED(hr))
return hr;
// 注册初始化安全
hr = RegisterCLSIDInCategory(_clsid, CATID_SafeForInitializing);
if (FAILED(hr))
return hr;
// 创建脚本安全组件种类
hr = CreateComponentCategory(CATID_SafeForScripting, L"脚本操作安全!");
if (FAILED(hr))
return hr;
// 标记控件脚本安全, 注册脚本安全组件种类
hr = RegisterCLSIDInCategory(_clsid, CATID_SafeForScripting);
if (FAILED(hr))
return hr;
return NOERROR;
}
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 = 0x0804 ; // 中文
// 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;
}
|
|
| 返回顶楼 | |
|
时间:2008-05-11
谢谢楼上大哥哈 我仔细看一下
|
|
| 返回顶楼 | |
|
时间:2008-05-11
楼上大哥这个是C++语言吧 我不怎么会的哈 我用的是JAVA
|
|
| 返回顶楼 | |
|
时间:2008-05-12
MARK
我也碰到过这样的问题,尚未解决 |
|
| 返回顶楼 | |




