软件注册站
热情软件屋

 
如何获取网络盘的全路径
编号: QA001984    
建立日期: 1999年11月7日 最后修改日期: 1999年11月7日
所属类别: Visual Basic - 网络与通信
   
    操作系统: Win9x/NT
    编程工具: All
    问题: 请问如何获取网络盘的全路径(\\机器名...)?(张列)
   
    下面的例子来自微软的Knowledge Base的文章:“Q192689 HOWTO: Get UNC Path From a Mapped Network Share's Drive Letter”
    

    SUMMARY
    =======
    Most network client software allows you to refer to network drives through the use of mapped drive letters or the use of syntax known as UNC notation (Universal Naming Convention). Use of UNC notation requires that you know the name of the server and share, while a mapped drive letter only requires the drive letter once the connection has been established. At times, it may be necessary to determine the UNC path to a server given only it's mapped drive letter. This article demonstrates a method for obtaining this information.
    
    MORE INFORMATION
    ================
    
    Step-by-Step Example
    --------------------
    
    1. Map a drive letter to any available network share and make note of the letter assigned.
    2. Create a new Visual Basic project. Form1 is created by default.
    3. Add a CommandButton to Form1.
    4. Paste the following code into Form1's code window:
    
     Option Explicit
    
     Private Const RESOURCETYPE_ANY = &H0
     Private Const RESOURCE_CONNECTED = &H1
    
     Private Type NETRESOURCE
     dwScope As Long
     dwType As Long
     dwDisplayType As Long
     dwUsage As Long
     lpLocalName As Long
     lpRemoteName As Long
     lpComment As Long
     lpProvider As Long
     End Type
    
     Private Declare Function WNetOpenEnum Lib "mpr.dll" Alias _
     "WNetOpenEnumA" (ByVal dwScope As Long, ByVal dwType As Long, _
     ByVal dwUsage As Long, lpNetResource As Any, lphEnum As Long) _
     As Long
    
     Private Declare Function WNetEnumResource Lib "mpr.dll" Alias _
     "WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long, _
     lpBuffer As Any, lpBufferSize As Long) As Long
    
     Private Declare Function WNetCloseEnum Lib "mpr.dll" ( _
     ByVal hEnum As Long) As Long
    
     Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" _
     (ByVal lpString As Any) As Long
    
     Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" _
     (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long
    
     Private Sub Command1_Click()
     MsgBox LetterToUNC("F:") ' <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
     End Sub
    
     Function LetterToUNC(DriveLetter As String) As String
     Dim hEnum As Long
     Dim NetInfo(1023) As NETRESOURCE
     Dim entries As Long
     Dim nStatus As Long
     Dim LocalName As String
     Dim UNCName As String
     Dim i As Long
     Dim r As Long
    
     ' Begin the enumeration
     nStatus = WNetOpenEnum(RESOURCE_CONNECTED, RESOURCETYPE_ANY, _
     0&, ByVal 0&, hEnum)
    
     LetterToUNC = "Drive Letter Not Found"
    
     'Check for success from open enum
     If ((nStatus = 0) And (hEnum <> 0)) Then
     ' Set number of entries
     entries = 1024
    
     ' Enumerate the resource
     nStatus = WNetEnumResource(hEnum, entries, NetInfo(0), _
     CLng(Len(NetInfo(0))) * 1024)
    
     ' Check for success
     If nStatus = 0 Then
     For i = 0 To entries - 1
     ' Get the local name
     LocalName = ""
     If NetInfo(i).lpLocalName <> 0 Then
     LocalName = Space(lstrlen(NetInfo(i).lpLocalName) + 1)
     r = lstrcpy(LocalName, NetInfo(i).lpLocalName)
     End If
    
     ' Strip null character from end
     If Len(LocalName) <> 0 Then
     LocalName = Left(LocalName, (Len(LocalName) - 1))
     End If
    
     If UCase$(LocalName) = UCase$(DriveLetter) Then
     ' Get the remote name
     UNCName = ""
     If NetInfo(i).lpRemoteName <> 0 Then
     UNCName = Space(lstrlen(NetInfo(i).lpRemoteName) _
     + 1)
     r = lstrcpy(UNCName, NetInfo(i).lpRemoteName)
     End If
    
     ' Strip null character from end
     If Len(UNCName) <> 0 Then
     UNCName = Left(UNCName, (Len(UNCName) _
     - 1))
     End If
    
     ' Return the UNC path to drive
     LetterToUNC = UNCName
    
     ' Exit the loop
     Exit For
     End If
     Next i
     End If
     End If
    
     ' End enumeration
     nStatus = WNetCloseEnum(hEnum)
     End Function
    5. Change the code in Command1's Click event to refer to the drive letter created by step 1.
    6. Run the sample.
    7. Click the CommandButton. The UNC path to the mapped drive is shown in a message box.
    

    

此问题由李海回答。

附加关键字:编程, 源程序, programming, source code, Visual Basic, VB, 网络与通信, network, communicate, com, com1, com2

   
 
把这个问题推荐给朋友
   
 
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio