SHGetDesktopFolder | Возвращает интерфейс IShellFolder объекта-папки "Рабочий стол" (Desktop); |
SHGetSpecialFolderLocation | Возвращает указатель на список идентификаторов специального объекта-папки. |
SHBrowseForFolder | Проводит диалог с пользователем и возвращает указатель на список идентификаторов выбранного пользователем объекта-папки; |
SHGetSpecialFolderPath | Версия 4.71. Возвращает путь файловой системы для специального объекта-папки. Функция предназначена для работы со специальными папками, а не для работы с виртуальными. |
При отсутствии нужной папки может, по требованию приложения, её создавать.
Каждый объект-папка прдоставляет Вам возможность перебора всех объектов, которыми данный объект владеет. Для этого Вам предоставляется метод EnumObjects интерфейса IShellFolder, который возвращает интерфейс-итератор IEnumIDList. При этом Вы можете ограничить список (включать папки, не папки, скрытые и системные объекты).
Описание методов интерфейса IEnumIDList:
Clone | Создаёт новый объект-итератор, идентичный данному; |
Next | Восстанавливает указанное количество идентификаторов элементов, находящихся в папке; |
Reset | Возвращает итератор к началу последовательности; |
Skip | Пропускает указанное количество элементов; |
Таким образом Вы сможете получить набор указателей на списки идентификаторов, причём эти списки будут относительными по отношению к папке-владельцу.
Чтобы получить интерфейс IShellFolder для любого из этих объектов, Вам потребуется осуществить привязку, вызвав метод BindToObject интерфейса IShellFolder папки-владельца.
Чтобы узнать атрибуты данного объекта или нескольких объектов, необходимо вызвать метод GetAttributesOf интерфейса IShellFolder папки-владельца. При этом перед вызовом этого метода необходимо установить те атрибуты, значения которых Вы бы хотели выяснить. Если запрошены атрибуты нескольких элементов, то метод вернёт только те значения атрибутов, которые совпадают у всех переданных элементов. В частности, Вы сможете взять интерфейс IShellFolder только от тех объектов, которые имеют атрибут SFGAO_FOLDER. Вы можете обновить информацию об элементах, входящих в папку, использовав флаг SFGAO_VALIDATE.
Прежде всего, Ваше приложение всегда можете получить строку с именем объекта, представленном в удобном для Вас формате. Для этого интерфейс IShellFolder предоставляет метод GetDisplayNameOf.
Вы можете указать один из следующих требующихся форматов:
SHGDN_NORMAL | Обычный формат представления; |
SHGDN_INFOLDER | Формат представления относительно данной папки; |
SHGDN_INCLUDE_NONFILESYS | Приложение заинтересовано в именах элементов всех типов. Если этот флаг не установлен, то приложение заинтересовано лишь в тех элементах, которые представляют часть файловой системы. Если этот флаг не установлен, и элемент не представляет собой часть файловой системы, то этот метод может быть выполнен неудачно; |
SHGDN_FORADDRESSBAR | Имя будет использовано для показа в адресном комбобоксе; |
SHGDN_FORPARSING | Формат представления, используемый для дальнейшего разбора имени; |
Имя элемента, полученное с установленным флагом SHGDN_FORPARSING, имеет особое значение. Вы можете использовать такое имя как командную строку для запуска приложения. Говоря точнее – такое имя эквивалентно понятию пути файловой системы.