Элемент управления WebBrowser: блокировка загрузки определенного элемента управления ActiveX - PullRequest
0 голосов
/ 06 апреля 2019

Я размещаю элемент управления WebBrowser (используя ATL) и ищу способ заблокировать загрузку определенного элемента управления ActiveX (по CLSID).

Я знаю, что ProcessUrlAction может блокировать элементы управления ActiveX, ноЭто относится ко всему URL-адресу и не позволяет блокировать определенный элемент управления ActiveX с помощью CLSID.

Я не вижу каких-либо определенных интерфейсов событий, которые получают уведомление в MSHTML или в элементе управления WebBrowser.

Прямо сейчас единственное решение, которое я могу придумать, это перехватить CoCreateInstanceEx и попытаться заблокировать его там.

Есть более простые идеи?

1 Ответ

0 голосов
/ 02 мая 2019

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...