WNetGetConnection
C# Signature:
[DllImport("mpr.dll", CharSet=CharSet.Auto, SetLastError=true)]
public static extern int WNetGetConnection([MarshalAs(UnmanagedType.LPTStr)] string localName, [MarshalAs(UnmanagedType.LPTStr)] StringBuilder remoteName, ref int length);
VB Signature:
''' <summary>
''' Use to get UNC Path of a Mapped Drive
''' </summary>
''' <param name="localName"></param>
''' <param name="remoteName"></param>
''' <param name="length"></param>
''' <returns></returns>
''' <remarks></remarks>
<DllImport("mpr.dll")> _
Shared Function WNetGetConnection(<MarshalAs(UnmanagedType.LPTStr)> _
ByVal localName As String, ByVal remoteName As System.Text.StringBuilder, _
ByRef length As Integer) As Integer
End Function
Alternative VB Signature:
Declare Function WNetGetConnection Lib "mpr.dll" Alias "WNetGetConnectionA" (ByVal localName As String, ByVal remoteName As System.Text.StringBuilder, ByRef length As Integer) As Integer
Sample Code for Visal Basic 2005 Express Edition:
Declare Function WNetGetConnection Lib "mpr.dll" Alias "WNetGetConnectionA" (ByVal localName As String, _
ByVal remoteName As System.Text.StringBuilder, ByRef length As Integer) As Integer
Private Function strToUnc(ByVal path As String)
Dim length As Integer = 255
Dim UNC As New System.Text.StringBuilder(length)
WNetGetConnection(Microsoft.VisualBasic.Left(path, 2), UNC, length)
Return UNC.ToString
End Function
'to get the UNC-Path of a network-drive use something like:
Private Sub Test()
Dim dr As String = "J:\"
MsgBox("The UNC-Path of drive " & dr & " is: " & strToUnc(dr))
End Sub
Sample Code for VB.NET with error handling:
Declare Function WNetGetConnection Lib "mpr.dll" Alias "WNetGetConnectionA" _
(ByVal localName As String, _
ByVal remoteName As System.Text.StringBuilder, _
ByRef length As Integer) As Integer
Private Sub DisplayUncPath(ByVal aLocalPath As String)
Dim theDriveName As String = aLocalPath.Substring(0, aLocalPath.IndexOf(":") + 1)
If theDriveName <> "" Then
Dim theDriveInfo As New DriveInfo(theDriveName)
If theDriveInfo.DriveType = DriveType.Network Then
Dim uncPathBuf As New StringBuilder(259)
Dim err As Integer = WNetGetConnection(theDriveName, uncPathBuf, uncPathBuf.Capacity)
If err = 0 Then
Dim pathname As String = uncPathBuf.ToString()
MessageBox.Show(aLocalPath.Replace(theDriveName, pathname))
Else
MessageBox.Show("Failed with error :" & err)
End If
Else
MessageBox.Show(theDriveName & " is not a network mapped path.")
End If
End If
End Sub
Última actualización