Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
GetLogicalDriveStrings определяет имеющие силу логические диски на компьютере и размещает их названия корневых каталогов в строку lpBuffer. Каждое имя корневого каталога в буфере отделено нулевым символом и полными строковыми концами в двух нулевых символах. Например, если существуют только A: и C: , строка будет " a: \ (Null) c: \ (Null) с еще одним завершающим строку Null", где Null представляет нулевой символ. Функция возвращает 0, если произошла ошибка, в успешном случае возвращается длина строки, помещенной в lpBuffer
' Перечисляем имена всех корневых каталогов ' Так как каждый вход в строке берет ' четыре символа(три для имени и один для пустого ' указателя), мы можем рассчитать длину ' строки. Это освобождает нас от проблем ' относительно пустых указателей Dim drivenames As String ' получаем имена дисков Dim thisdrive As String ' буфер для имени диска Dim c As Long ' счетчик Dim slength As Long ' длина возвращаемой строки ' Создаем место в буфере для имен дисков drivenames = Space(255) ' должно хватить ' Получаем имена всех дисков slength = GetLogicalDriveStrings(255, drivenames) ' считаем по 4 символа для извлечения имен каждого диска For c = 1 To slength Step 4 ' извлекаем 3-х символьную строку X:\ (где X-буква диска) thisdrive = Mid(drivenames, c, 3) Debug.Print thisdrive ' показываем имена дисков Next c