📄 connectionmanager.vb
字号:
Imports System.Runtime.InteropServices
Public Class ConnectionManager
Private connectionInfo As CONNMGR_CONNECTIONINFO = New CONNMGR_CONNECTIONINFO
Private handle As IntPtr
Public Sub New()
Me.connectionInfo.cbSize = Marshal.SizeOf(Me.connectionInfo)
Me.connectionInfo.dwFlags = CONNMGR_FLAG.NO_ERROR_MSGS
Me.connectionInfo.dwParams = CONNMGR_PARAM.GUIDDESTNET
Me.connectionInfo.dwPriority = ConnectionPriority.HighPriorityBackground
End Sub
<DllImport("cellcore", SetLastError:=True)> _
Private Shared Function ConnMgrConnectionStatus(ByVal hConnection As IntPtr, <Out()> ByRef pdwStatus As ConnectionStatus) As Integer
End Function
<DllImport("cellcore", SetLastError:=True)> _
Private Shared Function ConnMgrEstablishConnection(ByRef pConnInfo As CONNMGR_CONNECTIONINFO, <Out()> ByRef phConnection As IntPtr) As Integer
End Function
<DllImport("cellcore", SetLastError:=True)> _
Private Shared Function ConnMgrEstablishConnectionSync(ByRef pConnInfo As CONNMGR_CONNECTIONINFO, <Out()> ByRef phConnection As IntPtr, ByVal dwTimeout As Integer, <Out()> ByRef pdwStatus As ConnectionStatus) As Integer
End Function
<DllImport("cellcore", SetLastError:=True)> _
Private Shared Function ConnMgrMapURL(ByVal pwszURL As String, <Out()> ByRef pguid As Guid, ByRef pdwIndex As Integer) As Integer
End Function
<DllImport("cellcore", SetLastError:=True)> _
Private Shared Function ConnMgrReleaseConnection(ByVal hConnection As IntPtr, ByVal lCache As Integer) As Integer
End Function
Public Sub EstablishConnection(ByVal destination As Guid)
Me.ReleaseConnection()
Me.connectionInfo.guidDestNet = destination
Dim hresult As Integer = ConnectionManager.ConnMgrEstablishConnection(Me.connectionInfo, Me.handle)
End Sub
Public Function EstablishConnectionSync(ByVal destination As Guid, ByVal timeout As TimeSpan) As ConnectionStatus
Dim status As ConnectionStatus
Me.ReleaseConnection()
Dim hresult As Integer = ConnectionManager.ConnMgrEstablishConnectionSync(Me.connectionInfo, Me.handle, Convert.ToInt32(timeout.TotalMilliseconds), status)
Return status
End Function
Public Shared Function MapUrl(ByVal url As Uri) As Guid()
Dim al As New ArrayList
Dim index As Integer = 0
Dim hresult As Integer = 0
Do While (hresult = 0)
Dim g As Guid
hresult = ConnectionManager.ConnMgrMapURL(url.ToString, g, index)
If (hresult = 0) Then
al.Add(g)
End If
Loop
Return DirectCast(al.ToArray(GetType(Guid)), Guid())
End Function
Public Sub ReleaseConnection()
If (Me.handle <> IntPtr.Zero) Then
Dim hresult As Integer = ConnectionManager.ConnMgrReleaseConnection(Me.handle, 0)
Me.handle = IntPtr.Zero
End If
End Sub
Public ReadOnly Property ConnectionStatus() As ConnectionStatus
Get
Dim status As ConnectionStatus = ConnectionStatus.Unknown
If (Me.handle <> IntPtr.Zero) Then
Dim hresult As Integer = ConnectionManager.ConnMgrConnectionStatus(Me.handle, status)
End If
Return status
End Get
End Property
<StructLayout(LayoutKind.Sequential)> _
Friend Structure CONNMGR_CONNECTIONINFO
Public cbSize As Integer
Public dwParams As CONNMGR_PARAM
Public dwFlags As CONNMGR_FLAG
Public dwPriority As ConnectionPriority
Public bExclusive As Integer
Public bDisabled As Integer
Public guidDestNet As Guid
Public hWnd As IntPtr
Public uMsg As UInt32
Public lParam As UInt32
Public ulMaxCost As UInt32
Public ulMinRcvBw As UInt32
Public ulMaxConnLatency As UInt32
End Structure
<Flags()> _
Friend Enum CONNMGR_FLAG
PROXY_HTTP = 1
PROXY_WAP = 2
PROXY_SOCKS4 = 4
PROXY_SOCKS5 = 8
SUSPEND_AWARE = &H10
REGISTERED_HOME = &H20
NO_ERROR_MSGS = &H40
End Enum
<Flags()> _
Friend Enum CONNMGR_PARAM
GUIDDESTNET = 1
MAXCOST = 2
MINRCVBW = 4
MAXCONNLATENCY = 8
End Enum
End Class
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -