Функция SHGetPathFromIDList

Declare Function SHGetPathFromIDList Lib "shell32" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long

SHGetPathFromIDList определяет путь папки, заданной указателем структуры ITEMIDLIST(PIDL). Функция работает только с физическими папками. С виртуальными папками функция не работает

Возвращаемое значение

В случае ошибки или, если PIDL ссылается на виртуальную папку, функция возвращает 0. В успешном случае функция возвращает ненулевое значение

Параметры

pidl
PIDL для определения физического пути папок(кроме виртуальных)
pszPath
Строка с завершающим нулевым символом, содержащая путь. Длина строки должна быть длиной 260 символов

Пример

' Откроем диалоговое окно Обзор папок
' и покажем полное имя папки
Dim bi As BROWSEINFO  ' структура для использовия функцией
Dim pidl As Long  ' PIDL
Dim physpath As String  ' физический путь папки
Dim retval As Long  ' возвращаемое значение

' Инициализируем структуру
bi.hwndOwner = Form1.hWnd
' Определяем виртуальную папку Мой компьютер
' вершиной списка
retval = SHGetSpecialFolderLocation(Form1.hWnd, CSIDL_DRIVES, bi.pidlRoot)
' Создаем место в буфере для получения имени папки
bi.pszDisplayName = Space(260)
bi.lpszTitle = "Выберите папку"
bi.ulFlags = 0
bi.lpfn = 0
bi.lParam = 0
bi.iImage = 0

' Откроем диалоговое окно Обзор папок
pidl = SHBrowseForFolder(bi)
' Если пользователь что-то выбрал,
' то показываем путь
If pidl <> 0 Then
  bi.pszDisplayName = Left(bi.pszDisplayName, InStr(bi.pszDisplayName, vbNullChar) - 1)
  Debug.Print "Вы выбрали: "; bi.pszDisplayName
' Если папка не явлеятся виртуальной, ' то показываем его путь
  physpath = Space(260)
  retval = SHGetPathFromIDList(pidl, physpath)
  If retval = 0 Then
    Debug.Print "Путь к папке: (виртуальная)"
  Else
    physpath = Left(physpath, InStr(physpath, vbNullChar) - 1)
    Debug.Print "Путь к папке: "; physpath
  End If
' Освобождаем pidl
  CoTaskMemFree pidl
End If

CoTaskMemFree bi.pidlRoot

Категория

Оболочка