WinApi Функция SHGetFileInfo
Описание:
function SHGetFileInfo(pszPath: PAnsiChar; dwFileAttributes: DWORD;
var psfi: TSHFileInfo; cbFileInfo, uFlags: UINT): DWORD;
Возвращает информацию об объекте файловой системы, как например файл, папка корень логичекого диска.
Извлекает информацию об объекте в файловой системе, как например, файл, папка, директорий, или корень накопителя.
Параметры
pszPath: Строка которая содежит путь к файлу или папки. Максимальная длинна равна MAX_PATH. Работают абсолютные и относительные пути.
Если в параметр uFlags установлен флаг SHGFI_PIDL, то pszPath это указатель на структуру TItemIDList, которая содержит список идентификаторов объекта, который однозначно идентифицирует файл(папку) в пределах пространтва имен оболочки Windows. Указатель на PIDL дожен быть обязательно абсолютный, относительный PIDL не принимается.
Можно использовать соглашение имен 8.3 или длинные имена.
dwFileAttributes: Флаги аттрибутов файлов. См. FILE_ATTRIBUTE_. Если в uFlags не установлен флаг SHGFI_USEFILEATTRIBUTES, этот параметр игнорируется.
psfi: Адрес структуры TSHFileInfo, которая получает информацию об объекте.
cbFileInfo: Размер структуры TSHFileInfo, в байтах.
uFlags: Флаги, опредлеяющие возвращаемую информацию:
SHGFI_ADDOVERLAYS - Для версии 5.0. Применненный подходящий оверлей к иконке файла. Флаг SHGFI_ICON должен быть установлен.
SHGFI_ATTR_SPECIFIED - Модифицирует SHGFI_ATTRIBUTES. Указывает, что параметр dwAttributes структуры TSHFileInfo содержит желательные аттрибуты. Эти аттрибуты будут возращены IShellFolder.GetAttributesOf. Если этот флаг не определен IShellFolder.GetAttributesOf будет возвращать 0xFFFFFFFF на запрос любых аттрибутов. Этот флаг не может быть установлен с флагом SHGFI_ICON.
SHGFI_ATTRIBUTES - Возвращает аттрибуты объекта. Аттрибуты копируются в параметр dwAttributes структуры TSHFileInfo. Это - те же аттрибуты полученные из IShellFolder.GetAttributesOf.
SHGFI_DISPLAYNAME - Извлекает наименование объекта в пространстве имен. Копируется в параметр szDisplayName структуры TSHFileInfo. Возвращается длинное имя ести есть, или 8.3 в случае отстутствия.
SHGFI_EXETYPE - Возвращает тип исполняемого файла, если в pszPath путь к исполняемому приложению. Информация упакована в возрващаемое значение. Этот флаг не может быть установлени совместно ни с какими другими флагами.
SHGFI_ICON - Возвращает хендл и индекс(в пределах системного кеша иконок) на иконку . Хендл копируется в параметр hIcon, а индекс в iIcon структуры TSHFileInfo.
SHGFI_ICONLOCATION - Возвращает имя файла и инфекс иконки в предлах этого файла, указанного в pszPath. Имя файла содержащего иконку, копируется в параметр szDisplayName структуры TSHFileInfo. Инфекс иконки копируется в параметр iIcon.
SHGFI_LARGEICON - Модифицирует SHGFI_ICON, для того, чтобы извлечь большую иконку файла. Флаг SHGFI_ICON должен быть установлен.
SHGFI_LINKOVERLAY - Модифицирует SHGFI_ICON, для того, чтобы добавить оверлей связи файловой иконки. Флаг SHGFI_ICON должен быть установлен.
SHGFI_OPENICON Модифицирует SHGFI_ICON, для того, чтобы извлечь открытую иконку файла. Контейнерный объект может отобразить иконку. Флаг SHGFI_ICON должен быть установлен.
SHGFI_OVERLAYINDEX - Для версии 5.0. Возвращает индекс оверлейной иконки. Величина оверлейного индекса возвращается на старшие восемь бит параметра iIcon.
SHGFI_PIDL - Указывает, что что pszPath - адрес структуры TItemIDList а не имя пути.
SHGFI_SELECTED - Модифицирует SHGFI_ICON, для того, чтобы смешать икону файла, с системным световым цветом. Флаг SHGFI_ICON должен быть установлен.
SHGFI_SHELLICONSIZE - Модифицирует SHGFI_ICON, для того, чтобы извлечь размер иконки в пределах Оболочики Windows. Если этот флаг не установлен, то функция возращает размер в зависимости от системных установок. Флаг SHGFI_ICON должен быть установлен.
SHGFI_SMALLICON - Модифицирует SHGFI_ICON, для того, чтобы извлечь маленькую иконку файла. Флаг SHGFI_ICON должен быть установлен.
SHGFI_SYSICONINDEX - Возвращает индекс системной иконки из кеша иконок. Копируется в параметр iIcon. Возвращаемое значение является хендлом в системном кеше иконок. Только те иконки что успешно скопированны, имею силу. Попытка обратится к другим иконкам, может приветссти к неопределенному поведению.
SHGFI_TYPENAME - Возвращается строка, описывающая тип файла. Копируется в параметр szTypeName структуры TSHFileInfo.
SHGFI_USEFILEATTRIBUTES - Указывает, что функция не должна пытаться получить доступ к файлу pszPath. Этот флаг не может быть объединен с флагами SHGFI_ATTRIBUTES, SHGFI_EXETYPE или SHGFI_PIDL.
Возвращаемые значения
Возвращает значение, зависящее от флага uFlags.
Если uFlags не содержит SHGFI_EXETYPE или SHGFI_SYSICONINDEX, то возвращаемое значение не нуль в случае успеха и нуль в противном случае.
Если uFlags содержит SHGFI_SYSICONINDEX, возвращаемая величина это хендл иконки в списке иконок содержащих большие иконки. Если SHGFI_SMALLICON включен SHGFI_SYSICONINDEX, то маленкая иконка.
Если uFlags содержит флаг SHGFI_EXETYPE, то возвращаемая величина, тип выполняемого файла. Одно из следующих величин:
Если uFlags содержит флаг SHGFI_EXETYPE, обратная величина определяет тип выполняемого файла. Это будет одним из следующего величин:
0 - Не исполняемый файл или ошибка.
LOWORD = NE или PE и HIWORD = версия Microsoft Windows - приложение Microsoft Windows
LOWORD = PE and HIWORD = 0 - Windows 95, Windows 98: Исполняемые файлы Microsoft MS-DOS *.exe, *.com, или *.bat; Microsoft Windows NT, Windows 2000, Windows XP: Исполняемые файлы Microsoft MS-DOS *.exe или *.com
LOWORD = PE and HIWORD = 0 - Windows 95, Windows 98: Консольное приложение win32; Windows NT, Windows 2000, Windows XP: Консольное приложение win32 или файл *.bat
Замечания
Если SHGetFileInfo возвращает хендл иконки в параметр hIcon структуры TSHFileInfo, то вы ответственны за освобождение ресурса когда иконка будет не нужна. Сделать это можно функцией DestroyIcon.
Как только вы получите хендл списка иконок, то вы можте использовать ImageList APi для манипулирования списком. Используйте список как объект только для чтения.
Вы должны инициализировать COM до вызова SHGetFileInfo. Сделать это можно функциями CoInitialize или OleInitialize.
Материал взят из:
Русская спpавка по Windows API