2013-02-26 71 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