Получите дескриптор AxIWebBrowser2 WebBrowserControl для использования в InternetSetOption, проблемы COM с System .__ ComObject - PullRequest
1 голос
/ 23 ноября 2010

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

IЕсть ли способ получить доступ к свойству HWND этого объекта AxIWebBrowser2, используя C #?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2010

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

0 голосов
/ 23 ноября 2010

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

...