Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: hackerhasidОтветов: 2

Я пытаюсь установить прокси только для текущего экземпляра 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 с помощью С#?

reflectionwebbrowser-controlcom

Ответы

Ответ 1 · Josh

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

Ответ 2 · Sheng Jiang 蒋晟

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы