【问题标题】:Get WebBrowserControl's AxIWebBrowser2 Handle for use in InternetSetOption, COM issues with System.__ComObject获取 WebBrowserControl 的 AxIWebBrowser2 句柄以在 InternetSetOption 中使用,COM 问题与 System.__ComObject
【发布时间】:2011-05-14 04:27:27
【问题描述】:

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

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

有没有办法使用 C# 访问这个 AxIWebBrowser2 对象的 HWND 属性?

【问题讨论】:

    标签: c# reflection com webbrowser-control


    【解决方案1】:

    Hwnd 不会为您提供所需的内容。它是浏览器控件的窗口句柄。正在寻找的是 WinInet HINTERNET 句柄。据我所知,没有办法以编程方式访问它。您是否尝试过在进程范围内设置选项并将 IntPtr.Zero 作为 HINTERNET 句柄传入?

    【讨论】:

    • 是的,这行得通。但正如您所说,它是在整个流程的基础上进行的。我需要能够产生多个线程以使用多个代理。另一种方法是生成多个进程,每个进程都使用不同的代理,但我尝试做类似的事情,但它似乎无法正常工作——代理似乎是在全局基础上设置的!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-22
      • 2020-10-04
      • 1970-01-01
      相关资源
      最近更新 更多