我正在托管WebBrowser控件(使用ATL(,并且正在寻找一种方法来阻止特定的ActiveX控件(通过CLSID(加载。
我知道ProcessUrlAction可以阻止ActiveX控件,但这是针对整个URL,它似乎不允许你通过CLSID阻止特定的ActiveX控件。
我没有看到任何在 MSHTML 或 WebBrowser 控件中收到通知的特定事件接口。
现在我能想到的唯一解决方案是挂接CoCreateInstanceEx并尝试在那里阻止它。
有什么更简单的想法吗?
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;
}