获取WebBrowserControl的AxIWebBrowser2句柄,用于InternetSetOption,COM问题与System .__ ComObject

时间:2010-11-23 00:12:04

标签: c# reflection com webbrowser-control

我正在尝试仅为WebBrowserControl的当前实例设置代理。文档很糟糕,但我相信如果我调用wininet.dll的{​​{1}}将IntPtr句柄传递给WebBrowserControl使用的内部浏览器作为第一个参数,那么该方法只会影响当前实例(和我可以使用此方法设置代理http://msdn.microsoft.com/en-us/library/aa385114(v=VS.85).aspx)。但是,WebBrowserControl不提供任何访问此句柄的方法。我花了几个小时搜索和搜索SO,似乎这对很多人都非常有帮助,但是没有人知道它了!

WebBrowserControl有一个名为AxIWebBrowser2的属性,它是我需要句柄的COM对象。 MS用于此的接口称为InternetSetOption,并且具有一个名为UnsafeNativeMethods.IWebBrowser2的属性,我认为这是我需要的。但是,HWND标记为UnsafeNativeMethods.IWebBrowser2。使用WebBrowserControl上的反射,我可以获取私有internal属性值,但其上的类型显示为AxIWebBrowser2。我无法将此System.__ComObject转换为System.__ComObject,因为这是IWebBrowser2程序集的内部。

有没有办法使用C#访问此Windows.Forms对象的HWND属性?

2 个答案:

答案 0 :(得分:0)

Hwnd不会给你你想要的东西。它是浏览器控件的窗口句柄。正在寻找的是WinInet HINTERNET手柄。据我所知,没有办法以编程方式访问它。您是否尝试在整个流程范围内设置该选项并将IntPtr.Zero作为HINTERNET句柄传递?

答案 1 :(得分:0)

尝试将IE配置为使用从代理池分配代理的proxy automatic configuration script(或者只更改每个Web请求的http响应中的代理)和disable the automatic proxy caching