Интерфейс IShellFolder
Два метода – ParseDisplayName и GetDisplayNameOf – взаимно дополняют друг друга. Первый из них нужен, если вы имеете указатель на ishellFoider и хотите связать его с конкретной папкой. На практике это сводится к задаче в три действия:
- Получить указатель на интерфейс какой-либо папки, скажем, рабочего стола при помощи ShGetDesktopFolder.
- Получить указатель (pidl) нужного вам элемента. Это осуществимо многими способами. Первый из них – как раз через вызов метода IShellFolder.ParseDisplayName. Если вы хотите получить доступ к одной из виртуальных (специальных) папок, то незаменимой будет следующая функция:
function SHGetSpecialFolderLocation(hwndOwner: HWND; nFolder: Integer; var ppidl: PItemlDList): HResult;
В параметре nFolder вы задаете константу, соответствующую выбранной специальной папке. На выходе будет указатель на элемент ppidl, соответствующий этой папке.
Примечание
Во многих функциях Shell API и методах его интерфейсов встречается параметр hwndOwner. Он должен задавать дескриптор окна на тот случай, если придется выводить диалоговое окно или окно с сообщением об ошибке.
Возможные значения параметра nFolder перечислены в табл. 31.2. В комментариях к ним "виртуальная" папка является особым объектом, который предоставляется пользователю при помощи Shell API. Просто "папка" реально существует где-то в файловой системе.
Таблица 31.2. Константы, определяющие специальные папки.
Значение | Комментарий |
---|---|
CSIDL_BITBUCKET | Корзина (Recycle bin) – специальная папка для удаленных файлов. Пути к Recycle bin нет в системном реестре во избежание перемещения или удаления, и его не узнать иным методом |
CSIDL_CONTROLS | Панель инструментов (Control Panel) – виртуальная папка, содержащая значки апплетов Панели инструментов |
CSIDL_DESKTOP | Виртуальная папка Рабочий стол (Desktop), корневая в пространстве имен |
CSIDL_DESKTOPDIRECTORY | Папка файловой системы, реально содержащая объекты рабочего стола |
CSIDL DRIVES | Виртуальная папка Мой компьютер (My Computer), содержащая элементы для всех накопителей на компьютере подключенных сетевых устройств, папки Принтеры, Панель инструментов, Удаленный доступ к сети |
CSIDL FONTS | Виртуальная папка Шрифты |
CSIDL NETHOOD | Папка, содержащая объекты сетевого окружения |
CSIDL_NETWORK | Виртуальная папка Сетевое окружение (Network Neighborhood) |
CSIDL_PERSONAL | Папка Мои документы |
CSIDL_PRINTERS | Виртуальная папка Принтеры (Printers) |
CSIDL_PROGRAMS | Папка Программы из главного меню, содержащая папки установленных на компьютере программ |
CSIDL RECENT | Папка, содержащая ссылки на последние использовавшиеся документы (Recent) |
CSIDL SENDTO | Папка, содержащая элементы контекстного меню Send To… |
CSIDL_STARTMENU | Папка, содержащая элементы главного меню Пуск (Start) |
CSIDL_STARTUP | Папка, содержащая элементы меню Автозапуск (Startup) |
CSIDL_TEMPIATES | Папка, содержащая шаблоны типовых документов |