我正在托管WebBrowser控件(使用ATL),并且正在寻找一种阻止加载特定ActiveX控件(通过CLSID)的方法。
我知道ProcessUrlAction可以阻止ActiveX控件,但这是针对整个URL的,它似乎不允许您通过CLSID阻止特定的ActiveX控件。
我看不到任何特定的事件接口在MSHTML或WebBrowser控件中得到通知。
现在,我唯一想到的解决方案是挂接CoCreateInstanceEx并尝试将其阻止在那里。
还有更简单的想法吗?
答案 0 :(得分:0)
ProcessUrlAction也可以阻止单个控件,您需要检查dwAction = URLACTION_ACTIVEX_RUN,如果是,则pContext将具有将要运行的控件的CLSID。如果要阻止,则将pPolicy设置为URLPOLICY_DISALLOW并返回S_FALSE:
static CLSID CLSID_BAD = {0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
STDMETHOD(ProcessUrlAction)(LPCWSTR pwszUrl, DWORD dwAction, BYTE *pPolicy, DWORD cbPolicy, BYTE *pContext, DWORD cbContext, DWORD dwFlags, DWORD dwReserved)
{
if(URLACTION_ACTIVEX_RUN == dwAction && CLSID_BAD == *(CLSID *)pContext)
{
*pPolicy = URLPOLICY_DISALLOW;
return S_FALSE;
}
return INET_E_DEFAULT_ACTION;
}