Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 设置系统代理_Vb.net_Proxy - Fatal编程技术网

Vb.net 设置系统代理

Vb.net 设置系统代理,vb.net,proxy,Vb.net,Proxy,在VisualBasic.NET中的何处可以找到设置系统代理的方法 我想在代理服务器上设置一个检查。然后将系统代理设置为该代理服务器 我似乎找不到任何地方有这样做的信息。你查过了吗 它包括更改应用程序的全局代理以及更改系统设置。以下类将设置系统代理。这不是我自己写的,我一辈子都记不起是在哪里找到的: Imports System Imports System.Runtime.InteropServices Public Class IEProxy Public Enum Options

在VisualBasic.NET中的何处可以找到设置系统代理的方法

我想在代理服务器上设置一个检查。然后将系统代理设置为该代理服务器

我似乎找不到任何地方有这样做的信息。

你查过了吗


它包括更改应用程序的全局代理以及更改系统设置。

以下类将设置系统代理。这不是我自己写的,我一辈子都记不起是在哪里找到的:

Imports System
Imports System.Runtime.InteropServices


Public Class IEProxy

Public Enum Options

    INTERNET_PER_CONN_FLAGS = 1

    INTERNET_PER_CONN_PROXY_SERVER = 2

    INTERNET_PER_CONN_PROXY_BYPASS = 3

    INTERNET_PER_CONN_AUTOCONFIG_URL = 4

    INTERNET_PER_CONN_AUTODISCOVERY_FLAGS = 5

    INTERNET_OPTION_REFRESH = 37

    INTERNET_OPTION_PER_CONNECTION_OPTION = 75

    INTERNET_OPTION_SETTINGS_CHANGED = 39

    PROXY_TYPE_PROXY = &H2

    PROXY_TYPE_DIRECT = &H1

End Enum


<StructLayout(LayoutKind.Sequential)> _
Private Class FILETIME

    Public dwLowDateTime As Integer

    Public dwHighDateTime As Integer

End Class


<StructLayout(LayoutKind.Explicit, Size:=12)> _
Private Structure INTERNET_PER_CONN_OPTION

    <FieldOffset(0)> Dim dwOption As Integer

    <FieldOffset(4)> Dim dwValue As Integer

    <FieldOffset(4)> Dim pszValue As IntPtr

    <FieldOffset(4)> Dim ftValue As IntPtr


    Public Function GetBytes() As Byte()

        Dim b(12) As Byte

        BitConverter.GetBytes(dwOption).CopyTo(b, 0)

        Select Case dwOption

            Case (Options.INTERNET_PER_CONN_FLAGS)

                BitConverter.GetBytes(dwValue).CopyTo(b, 4)

            Case (Options.INTERNET_PER_CONN_PROXY_BYPASS)

                BitConverter.GetBytes(pszValue.ToInt32()).CopyTo(b, 4)

            Case (Options.INTERNET_PER_CONN_PROXY_SERVER)

                BitConverter.GetBytes(pszValue.ToInt32()).CopyTo(b, 4)

        End Select

        Return (b)

    End Function

End Structure


<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _
Private Class INTERNET_PER_CONN_OPTION_LIST

    Public dwSize As Integer

    Public pszConnection As String

    Public dwOptionCount As Integer

    Public dwOptionError As Integer

    Public pOptions As IntPtr

End Class

<StructLayout(LayoutKind.Sequential)> _
Private Class INTERNET_PROXY_INFO

    Public dwAccessType As Integer

    Public lpszProxy As IntPtr

    Public lpszProxyBypass As IntPtr

End Class


Private Const ERROR_INSUFFICIENT_BUFFER = 122

Private Const INTERNET_OPTION_PROXY = 38

Private Const INTERNET_OPEN_TYPE_DIRECT = 1


<DllImport("wininet.dll")> _
Private Shared Function InternetSetOption(ByVal hInternet As IntPtr, _
               ByVal dwOption As Integer, _
               ByVal lpBuffer As INTERNET_PER_CONN_OPTION_LIST, _
               ByVal dwBufferLength As Integer) As Boolean

End Function


<DllImport("kernel32.dll")> _
Private Shared Function GetLastError() As Integer

End Function


Public Function SetProxy(ByVal proxy_full_addr As String) As Boolean

    Dim bReturn As Boolean

    Dim list As New INTERNET_PER_CONN_OPTION_LIST

    Dim dwBufSize As Integer = Marshal.SizeOf(list)

    Dim opts(3) As INTERNET_PER_CONN_OPTION

    Dim opt_size As Integer = Marshal.SizeOf(opts(0))


    list.dwSize = dwBufSize

    list.pszConnection = ControlChars.NullChar

    list.dwOptionCount = 3


    'set flags

    opts(0).dwOption = Options.INTERNET_PER_CONN_FLAGS

    opts(0).dwValue = Options.PROXY_TYPE_DIRECT Or Options.PROXY_TYPE_PROXY


    'set proxyname

    opts(1).dwOption = Options.INTERNET_PER_CONN_PROXY_SERVER

    opts(1).pszValue = Marshal.StringToHGlobalAnsi(proxy_full_addr)


    'set override

    opts(2).dwOption = Options.INTERNET_PER_CONN_PROXY_BYPASS

    opts(2).pszValue = Marshal.StringToHGlobalAnsi("local")


    Dim b(3 * opt_size) As Byte

    opts(0).GetBytes().CopyTo(b, 0)

    opts(1).GetBytes().CopyTo(b, opt_size)

    opts(2).GetBytes().CopyTo(b, 2 * opt_size)


    Dim ptr As IntPtr = Marshal.AllocCoTaskMem(3 * opt_size)

    Marshal.Copy(b, 0, ptr, 3 * opt_size)


    list.pOptions = ptr

    'Set the options on the connection

    bReturn = InternetSetOption(IntPtr.Zero, Options.INTERNET_OPTION_PER_CONNECTION_OPTION, list, dwBufSize)

    If Not bReturn Then

        Debug.WriteLine(GetLastError)

    End If


    'Notify existing Internet Explorer instances that the settings have changed

    bReturn = InternetSetOption(IntPtr.Zero, Options.INTERNET_OPTION_SETTINGS_CHANGED, Nothing, 0)

    If Not bReturn Then

        Debug.WriteLine(GetLastError)

    End If


    'Flush the current IE proxy setting

    bReturn = InternetSetOption(IntPtr.Zero, Options.INTERNET_OPTION_REFRESH, Nothing, 0)

    If Not bReturn Then

        Debug.WriteLine(GetLastError)

    End If


    Marshal.FreeHGlobal(opts(1).pszValue)

    Marshal.FreeHGlobal(opts(2).pszValue)

    Marshal.FreeCoTaskMem(ptr)

    Return (bReturn)

End Function


Public Function DisableProxy() As Boolean

    Dim bReturn As Boolean

    Dim list As New INTERNET_PER_CONN_OPTION_LIST

    Dim dwBufSize As Integer = Marshal.SizeOf(list)

    Dim opts(0) As INTERNET_PER_CONN_OPTION

    Dim opt_size As Integer = Marshal.SizeOf(opts(0))


    list.dwSize = dwBufSize

    list.pszConnection = ControlChars.NullChar

    list.dwOptionCount = 1


    opts(0).dwOption = Options.INTERNET_PER_CONN_FLAGS

    opts(0).dwValue = Options.PROXY_TYPE_DIRECT


    Dim b(opt_size) As Byte

    opts(0).GetBytes().CopyTo(b, 0)


    Dim ptr As IntPtr = Marshal.AllocCoTaskMem(opt_size)

    Marshal.Copy(b, 0, ptr, opt_size)


    list.pOptions = ptr

    'Set the options on the connection

    bReturn = InternetSetOption(IntPtr.Zero, Options.INTERNET_OPTION_PER_CONNECTION_OPTION, list, dwBufSize)

    If Not bReturn Then

        Debug.WriteLine(GetLastError)

    End If


    'Notify existing Internet Explorer instances that the settings have changed

    bReturn = InternetSetOption(IntPtr.Zero, Options.INTERNET_OPTION_SETTINGS_CHANGED, Nothing, 0)

    If Not bReturn Then

        Debug.WriteLine(GetLastError)

    End If


    'Flush the current IE proxy setting

    bReturn = InternetSetOption(IntPtr.Zero, Options.INTERNET_OPTION_REFRESH, Nothing, 0)

    If Not bReturn Then

        Debug.WriteLine(GetLastError)

    End If


    Marshal.FreeCoTaskMem(ptr)

    Return (bReturn)

End Function


End Class

这是一个模糊的回忆-但我似乎记得系统从Internet Explorer获取其代理设置。您的应用程序需要它吗?还是其他应用程序?您可能需要考虑和设置系统设置。
Dim sProxy As New IEProxy
'set
sProxy.SetProxy("123.2.2.123:8080") 'Returns True if successful
'disable
sProxy.DisableProxy 'Returns True if successful