使用不同代理的多个Web浏览器控件实例

时间:2012-03-20 16:16:29

标签: .net proxy browser webbrowser-control instance

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

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

有人有解决方案吗?

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

1 个答案:

答案 0 :(得分:0)

不幸的是,你不能为每个insnance设置代理。甚至不是每个应用程序 - 它是全球性的。如果你为.net应用程序更改它,它也会影响IE。

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

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

更改代理设置将动态影响.NET应用程序 - 您无需重新启动应用程序,甚至无需重新启动Web浏览器控件即可进行更改。

以下是更改代理的完整代码。

使用“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