2

アプリケーションで異なる Web ブラウザごとにプロキシを設定できるかどうかを知りたかった (同じプロセス)。

レジストリと別のプロセス固有のプロキシを変更することにより、プロキシシステム全体を変更するコードを見つけるために多くの検索を行いました。しかし、同じプロセス内の各Webブラウザーに異なるプロキシを持たせたい

例: WebBrowser1 プロキシ --> 95.188.106.78:3128

WebBrowser 2 プロキシ --> 89.218.160.162:9090

WebBrowser 3 プロキシ --> 78.39.68.145:3128 など

または、WebBrowserを直接使用してそれが不可能な場合は、他の誰かがこれを達成するために何を使用できるかを提案できます(Webリクエストではなく、すべてのデータをロードでき、ユーザーはそれと対話できますが、異なるプロキシを使用できるブラウザのみが必要です)のようにgeckofx または webkit を使用していますか? しかし、それらで可能かどうかはわかりません

4

2 に答える 2

1

これを見てください- そのVB.NETを申し訳ありません

基本的には、InernetSetOption を変更して IE DLL の 1 つを編集することで構成できると言っています。お役に立てれば。

ここに役立つ別のリンクがあります

于 2013-02-26T14:42:20.323 に答える
0

残念ながら、インスタンスごとにプロキシを設定することはできません。アプリケーションごとでもなく、グローバルです。.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
于 2013-03-01T20:19:03.893 に答える