📄 connectionmanager.vb
字号:
Imports System.Runtime.InteropServices
Imports Microsoft.WindowsCE.Forms
Public Class ConnectionManager
Private messageWindow As New ConnectionManagerMessageWindow(Me)
Private connectionInfo As NativeMethods.CONNMGR_CONNECTIONINFO = New NativeMethods.CONNMGR_CONNECTIONINFO
Private handle As IntPtr
Public Sub New()
Me.connectionInfo.cbSize = Marshal.SizeOf(Me.connectionInfo)
Me.connectionInfo.dwFlags = NativeMethods.CONNMGR_FLAG.NO_ERROR_MSGS
Me.connectionInfo.dwParams = NativeMethods.CONNMGR_PARAM.GUIDDESTNET
Me.connectionInfo.dwPriority = ConnectionPriority.HighPriorityBackground
Me.connectionInfo.hWnd = messageWindow.Hwnd
Me.connectionInfo.uMsg = ConnectionManagerMessageWindow.WM_ConnectionManager
End Sub
Public Event ConnectionStatusChanged As ConnectionStatusChangedEventHandler
Friend Sub OnConnectionStatusChanged(ByVal e As ConnectionStatusChangedEventArgs)
RaiseEvent ConnectionStatusChanged(e)
End Sub
Public Sub EstablishConnection(ByVal destination As Guid)
Me.ReleaseConnection()
Me.connectionInfo.guidDestNet = destination
Dim hresult As Integer = NativeMethods.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 = NativeMethods.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 = NativeMethods.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 = NativeMethods.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 = NativeMethods.ConnMgrConnectionStatus(Me.handle, status)
End If
Return status
End Get
End Property
End Class
Friend Class ConnectionManagerMessageWindow
Inherits MessageWindow
Private connectionManager As ConnectionManager
Friend Shared WM_ConnectionManager As Integer = NativeMethods.RegisterWindowMessage("ConnectionManagerEvent")
Friend Sub New(ByVal parent As ConnectionManager)
Me.connectionManager = parent
End Sub
Protected Overrides Sub WndProc(ByRef m As Message)
If (m.Msg = ConnectionManagerMessageWindow.WM_ConnectionManager) Then
Dim status As ConnectionStatus = DirectCast(m.WParam.ToInt32, ConnectionStatus)
Me.connectionManager.OnConnectionStatusChanged(New ConnectionStatusChangedEventArgs(status))
End If
MyBase.WndProc((m))
End Sub
End Class
Public Delegate Sub ConnectionStatusChangedEventHandler(ByVal e As ConnectionStatusChangedEventArgs)
Public Class ConnectionStatusChangedEventArgs
Inherits EventArgs
Public Sub New(ByVal status As ConnectionStatus)
m_connectionStatus = status
End Sub
Private m_connectionStatus As ConnectionStatus
Public ReadOnly Property ConnectionStatus() As ConnectionStatus
Get
Return m_connectionStatus
End Get
End Property
End Class
Friend Class NativeMethods
<DllImport("cellcore", SetLastError:=True)> _
Friend Shared Function ConnMgrConnectionStatus(ByVal hConnection As IntPtr, <Out()> ByRef pdwStatus As ConnectionStatus) As Integer
End Function
<DllImport("cellcore", SetLastError:=True)> _
Friend Shared Function ConnMgrEstablishConnection(ByRef pConnInfo As CONNMGR_CONNECTIONINFO, <Out()> ByRef phConnection As IntPtr) As Integer
End Function
<DllImport("cellcore", SetLastError:=True)> _
Friend 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)> _
Friend Shared Function ConnMgrMapURL(ByVal pwszURL As String, <Out()> ByRef pguid As Guid, ByRef pdwIndex As Integer) As Integer
End Function
<DllImport("cellcore", SetLastError:=True)> _
Friend Shared Function ConnMgrReleaseConnection(ByVal hConnection As IntPtr, ByVal lCache As Integer) As Integer
End Function
<DllImport("coredll", SetLastError:=True)> _
Friend Shared Function RegisterWindowMessage(ByVal lpString As String) As Integer
End Function
<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 + -