【问题标题】:Webbrowser Each Control different proxyWebbrowser 每个控制不同的代理
【发布时间】:2013-02-26 14:31:36
【问题描述】:

我想知道是否可以为应用程序中的每个不同的网络浏览器设置代理(相同的进程)。

我搜索了很多代码来通过修改注册表和另一个特定于进程的代理来更改代理系统范围。但我希望同一进程中的每个网络浏览器都有不同的代理

例如:WebBrowser1 代理 --> 95.188.106.78:3128

WebBrowser 2 代理 --> 89.218.160.162:9090

WebBrowser 3 代理 --> 78.39.68.145:3128 等等

或者,如果直接使用 WebBrowser 是不可能的,那么任何人都可以建议我可以用什么来实现这一点(不是 webrequests,我只想要浏览器通过它我可以加载所有数据并且用户可以与它进行交互,但使用不同的代理)喜欢使用 geckofx 或 webkit?但我不知道它们是否可能

【问题讨论】:

    标签: c# .net vb.net proxy webbrowser-control


    【解决方案1】:

    看看this - 对不起它的VB.NET

    它基本上是说您可以通过更改 InernetSetOption 来编辑其中一个 IE DLL 来配置它。希望这会有所帮助。

    Here 是另一个可能有帮助的链接

    【讨论】:

    • 嗨,谢谢你的链接。但是,第一个链接声明在单个进程中设置 webbrowser 的代理。这意味着 WebBrowser1、WebBrowser2 都将具有相同的代理。但是,我希望每个都有不同的代理。第二个链接可以正常工作,但有一个主要问题。文档加载到浏览器后,它将使用默认代理下载我不想要的图像、javascript 文件等。
    【解决方案2】:

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

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

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

    它应该适合你。我将此应用程序用作我构建的自动代理循环器的概念证明。

    根据您的应用程序需要,您可以切换它,然后再切换回来。请注意,它会影响 Internet Explorer。

    要验证这是否有效,请检查 Internet Explorer。您可能需要打开/关闭 IE 的选项对话框,但您不需要重新启动浏览器。

    这也会影响运行中的 .NET 应用程序 - 如果您在您的程序运行时运行我的程序,您将能够更改您的程序正在使用的代理。

    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
    

    【讨论】:

    • 您也可以以编程方式打开 Windows 的互联网设置...这是我在上面的代码中省略的一个功能,因为它与问题没有直接关系...虽然它是 1 班轮: 调用 Shell("RunDLL32.exe Shell32.dll Control_RunDLL InetCpl.cpl", vbNormalFocus)
    猜你喜欢
    • 2012-02-20
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多