2012-03-20 28 views
0

我需要運行我的程序的2個或更多實例(這是一個帶有一些額外功能的簡單Web瀏覽器控件),並且在每個實例上我需要webbrowser控件來使用不同的代理連接到互聯網。使用不同代理的Web瀏覽器控件的多個實例

上次我使用的IE瀏覽器控制是在C++上,我記得不得不編輯註冊表來設置代理,但這導致了正常的IE也使用代理,並且沒有辦法使用多個實例不同的代理。

有人有這方面的解決方案嗎?

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

回答

0

不幸的是,你不能設置每個insinance的代理。甚至不是每個應用程序 - 它是全球性的。如果您爲.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