【问题标题】:Multiple instances of web browser control using different proxies使用不同代理的多个 Web 浏览器控制实例
【发布时间】:2012-03-20 16:16:29
【问题描述】:

我需要运行我的程序的 2 个或更多实例(这是一个具有一些额外功能的简单 webbrowser 控件),并且在每个实例上我需要 webbrowser 控件使用不同的代理来连接到 Internet。

上次我使用 IE 浏览器控件是在 C++ 上,我记得必须编辑注册表来设置代理,但这导致普通 IE 也使用代理,并且无法使用不同的多个实例代理。

有人对此有解决方案吗?

我可以使用 C++、C# O VB。

【问题讨论】:

    标签: .net proxy browser webbrowser-control instance


    【解决方案1】:

    很遗憾,您不能为每个实例设置代理。甚至不是每个应用程序 - 它是全球性的。如果您为 .net 应用程序更改它,它也会影响 IE。

    也许您可以创建多台“虚拟机”并为每台设置不同的代理?

    如果您不想这样做,也许您可​​以更改代理、导航、再次更改代理、再次导航...您必须编写一些代码来决定应用程序如何“轮流”

    更改代理设置会即时影响 .NET 应用程序 - 您无需重新启动应用程序,甚至无需重新启动 webbrowser 控件即可进行更改。

    这里是更改代理的完整代码。

    使用“B_Get”、“B_Set”和“B_Disable”按钮创建一个“Form1”,然后粘贴此代码。

    Imports Microsoft.Win32
    Imports System.Runtime.InteropServices
    
    
    
    Public Class Form1
    
        <DllImport("wininet.dll")>
        Public Shared Function InternetSetOption(hInternet As IntPtr, dwOption As Integer, lpBuffer As IntPtr, dwBufferLength As Integer) As Boolean
        End Function
    
        Public Const INTERNET_OPTION_SETTINGS_CHANGED As Integer = 39
        Public Const INTERNET_OPTION_REFRESH As Integer = 37
    
    
        'This function is what is called after editing the registry - this causes internet explorer to update its proxy even if it is already open.
        'It also effects the web browser control in any VB.net application that is running.
        Public Sub globalProxy_apply()
            Dim settingsReturn As Boolean = False
            Dim refreshReturn As Boolean = False
            settingsReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0)
            If Not settingsReturn Then
                MessageBox.Show("Error 001: Line ""InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0)"" failed.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
            refreshReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0)
            If Not refreshReturn Then
                MessageBox.Show("Error 002: Line ""InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0)"" failed.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
        End Sub
    
        Public Function globalProxy_IsProxyEnabled() As Boolean
            Try
                Dim Regs As RegistryKey = Registry.CurrentUser.CreateSubKey("Software\Microsoft\Windows\CurrentVersion\Internet Settings", RegistryKeyPermissionCheck.ReadWriteSubTree)
                If Regs.GetValue("ProxyEnable") <> Nothing Then
                    If Regs.GetValue("ProxyEnable").ToString() = "0" Then
                        Return False
                    Else
                        Return True
                    End If
                Else
                    Return False
                End If
            Catch ex As Exception
                MessageBox.Show("Error 01X: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                Return False
            End Try
        End Function
    
        Public Function globalProxy_GetProxyServer() As String
            Try
                Dim Regs As RegistryKey = Registry.CurrentUser.CreateSubKey("Software\Microsoft\Windows\CurrentVersion\Internet Settings", RegistryKeyPermissionCheck.ReadWriteSubTree)
                If Regs.GetValue("ProxyServer") <> Nothing Then
                    Return Regs.GetValue("ProxyServer").ToString()
                Else
                    Return ""
                End If
            Catch ex As Exception
                MessageBox.Show("Error 02X: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                Return ""
            End Try
        End Function
    
        Public Sub globalProxy_DisableProxy()
            Dim regkey As RegistryKey
            Try
                regkey = Registry.CurrentUser.CreateSubKey("Software\Microsoft\Windows\CurrentVersion\Internet Settings")
                regkey.SetValue("ProxyEnable", False, RegistryValueKind.DWord)
                regkey.Close()
            Catch ex As Exception
                MessageBox.Show("Error 03X: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
    
            globalProxy_apply()
        End Sub
    
        Public Sub globalProxy_SetProxy(ByVal ServerName As String)
            Dim regkey As RegistryKey
            Try
                regkey = Registry.CurrentUser.CreateSubKey("Software\Microsoft\Windows\CurrentVersion\Internet Settings")
                regkey.SetValue("ProxyServer", ServerName, RegistryValueKind.Unknown)
                regkey.SetValue("ProxyEnable", True, RegistryValueKind.DWord)
                regkey.Close()
            Catch ex As Exception
                MessageBox.Show("Error 04X: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
    
            globalProxy_apply()
        End Sub
    
        Private Sub B_Set_Click(sender As System.Object, e As System.EventArgs) Handles B_Set.Click
            If TextBox1.Text = "" Then
                globalProxy_DisableProxy()
            Else
                globalProxy_SetProxy(TextBox1.Text)
            End If
    
        End Sub
    
        Private Sub B_Disable_Click(sender As System.Object, e As System.EventArgs) Handles B_Disable.Click
            globalProxy_DisableProxy()
        End Sub
    
        Private Sub B_Get_Click(sender As System.Object, e As System.EventArgs) Handles B_Get.Click
            If globalProxy_IsProxyEnabled() Then
                TextBox1.Text = globalProxy_GetProxyServer()
            Else
                TextBox1.Text = ""
            End If
        End Sub
    
    End Class
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      • 2014-05-21
      • 1970-01-01
      • 2011-11-21
      • 1970-01-01
      • 2015-05-03
      • 2022-10-04
      相关资源
      最近更新 更多