Получить дескриптор AxIWebBrowser2 WebBrowserControl для использования в InternetSetOption, проблемах COM с System.__ComObject

Я пытаюсь установить прокси только для текущего экземпляра WebBrowserControl. Документация ужасна, но я считаю, что если я вызову wininet.dll InternetSetOption, передав дескриптор IntPtr внутреннему браузеру, используемому WebBrowserControl, в качестве первого параметра, тогда метод повлияет только на текущий экземпляр (и я могу установить прокси, используя этот метод http://msdn.microsoft.com/en-us/library/aa385114(v=VS.85).aspx). Однако WebBrowserControl не предоставляет никаких средств для доступа к этому дескриптору. Я часами гуглил и искал SO, и кажется, что это было бы очень полезно для многих людей, но никто еще не понял этого!

WebBrowserControl имеет свойство под названием AxIWebBrowser2, которое является COM-объектом, для которого мне нужен дескриптор. Интерфейс, который MS использует для этого, называется UnsafeNativeMethods.IWebBrowser2 и имеет свойство HWND, которое, как мне кажется, мне нужно. Однако UnsafeNativeMethods.IWebBrowser2 помечен как internal. Используя отражение в WebBrowserControl, я могу получить значение частного свойства AxIWebBrowser2, но тип на нем отображается как System.__ComObject. Я не могу преобразовать этот System.__ComObject в IWebBrowser2, потому что он является внутренним для сборки Windows.Forms.

Есть ли способ получить доступ к свойству HWND этого объекта AxIWebBrowser2 с помощью С#?


person hackerhasid    schedule 23.11.2010    source источник


Ответы (2)


Hwnd не даст вам то, что вы ищете. Это дескриптор окна элемента управления браузера. Что мы ищем, так это ручку WinInet HINTERNET. Насколько я знаю, нет никакого программного доступа к этому. Вы пытались установить параметр для всего процесса и передать IntPtr.Zero в качестве дескриптора HINTERNET?

person Josh    schedule 23.11.2010
comment
Да и это работает. Но, как вы сказали, это касается всего процесса. Мне нужно иметь возможность создавать несколько потоков для использования нескольких прокси. Альтернативой было бы создание нескольких процессов, каждый из которых использует разные прокси, но я попытался сделать что-то подобное, и это, похоже, не сработало - казалось, что прокси был установлен на глобальной основе! - person hackerhasid; 23.11.2010

Попробуйте настроить IE для использования сценария автоматической настройки прокси-сервера, который выделяет прокси-серверы из пула прокси-серверов (или просто измените прокси-сервер в ответе http для каждого веб-запроса) и отключите автоматическое кэширование прокси-сервера.

person Sheng Jiang 蒋晟    schedule 28.11.2010