Display a list of all logical drives and include full paths for mapped drives

B

brotherescott

I am trying to write some VBA code to list all the drives on my
computer and if they are mapped show the full path they map to. I am
trying to do this to help work across many computers better. I am
trying to understand were some spreadsheet/macro users are getting some
data from.

Here is some code I got from the Microsoft Knowledge Base. It gives me
the list of logical dirve letters on my PC but no path for the mapped
drives.'

Thanks
Scott

Private Declare Function GetLogicalDriveStrings Lib "kernel32" _
Alias "GetLogicalDriveStringsA" _
(ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

Private Function GetDriveStrings() As String
' Wrapper for calling the GetLogicalDriveStrings API

Dim result As Long ' Result of our api calls
Dim strDrives As String ' String to pass to api call
Dim lenStrDrives As Long ' Length of the above string

' Call GetLogicalDriveStrings with a buffer size of zero to
' find out how large our stringbuffer needs to be
result = GetLogicalDriveStrings(0, strDrives)

strDrives = String(result, 0)
lenStrDrives = result

' Call again with our new buffer
result = GetLogicalDriveStrings(lenStrDrives, strDrives)

If result = 0 Then
' There was some error calling the API
' Pass back an empty string
' NOTE - TODO: Implement proper error handling here
GetDriveStrings = ""
Else
GetDriveStrings = strDrives
End If
End Function

Private Sub CommandButton1_Click()
Dim strDrives As String

' Find out what drives we have on this machine
strDrives = GetDriveStrings()

If strDrives = "" Then
' No drives were found
MsgBox "No Drives were found!", vbCritical
Else
' Walk through the string and list each drive
DisplayDriveTypes strDrives
End If
End Sub

Private Sub DisplayDriveTypes(drives As String)
' Walk through the logical drive string and display the drive
' letters. The logical drive string is a null seperated
' double null terminated string.

Dim pos As Long
Dim drive As String

ListBox1.Clear
pos = 1

Do While Not Mid$(drives, pos, 1) = Chr(0)
drive = Mid$(drives, pos, 3)
pos = pos + 4
ListBox1.AddItem UCase(drive)
Loop
End Sub
 
T

Tom Ogilvy

http://support.microsoft.com/default.aspx?scid=kb;en-us;Q192689
Q192689 - HOWTO: Get UNC Path From a Mapped Network Share's Drive Letter


http://support.microsoft.com/default.aspx?scid=kb;en-us;Q291573
HOWTO: Use Visual Basic to List Active Logical Drives

http://support.microsoft.com/default.aspx?scid=kb;en-us;Q189667
HOWTO: List the Drives in a System Using the FileSystemObject


http://support.microsoft.com/default.aspx?scid=kb;en-us;Q256847
Q256847 - HOWTO: Use the WNetUseConnection API to Map a Drive in Visual Basic
 
B

brotherescott

The first link you sent worked perfectly. I had searched the MSKB but
did not understand the titles enough to look into some of them further.

Thanks
Scott
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top