2013-02-26 70 views
2

我想知道是否有可能为应用程序中每个不同的webbrowser设置代理(相同的进程)。Webbrowser每个控制不同的代理

我已经搜索了很多,通过修改注册表和另一个特定于流程的代理来查找更改代理系统范围的代码。但我想同样的过程里面每一个网页浏览器有不同的代理

如:WebBrowser1代理 - > 95.188.106.78:3128

web浏览器2代理 - > 89.218.160.162:9090

web浏览器3代理 - > 78.39.68.145:3128等

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

回答

1

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

它基本上是说,你可以通过改变InernetSetOption经过编辑的IE DLL的一个配置它。希望这可以帮助。

Here是另一个链接,可以帮助

+0

嗨,感谢那些链接。 但是,第一个链接指定在单个进程中设置webbrowser的代理。这意味着WebBrowser1,WebBrowser2都将具有相同的代理。不过,我希望每个人都有不同的代理。 第二个链接可以工作,但有一个主要问题。将文档加载到浏览器后,它将使用默认代理下载我不想要的图像,JavaScript文件等。 – 2013-02-28 06:52:44

0

不幸的是,你cannnot设置每个insnance代理。甚至不是每个应用程序 - 它是全球性的。如果你使用.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 
+0

你也可以通过编程方式打开windows的internet settigns ...这是我在上面的代码中省略的一个特性,因为它没有直接关系到问题......它的第1个班轮虽然:Call Shell(“RunDLL32。 exe文件Shell32.dll Control_RunDLL InetCpl.cpl“,vbNormalFocus) – Allen 2013-03-01 20:23:07