Функция SHGetFileInfoA (shellapi.h)
Извлекает сведения об объекте в файловой системе, например о файле, папке, каталоге или корневом каталоге диска.
Синтаксис
DWORD_PTR SHGetFileInfoA(
[in] LPCSTR pszPath,
DWORD dwFileAttributes,
[in, out] SHFILEINFOA *psfi,
UINT cbFileInfo,
UINT uFlags
);
Параметры
[in] pszPath
Тип: LPCTSTR
Указатель на строку, завершающуюся значением NULL, с максимальной длиной MAX_PATH, содержащую путь и имя файла. Допустимы как абсолютные, так и относительные пути.
Если параметр uFlags включает флаг SHGFI_PIDL , этот параметр должен быть адресом структуры ITEMIDLIST (PIDL), содержащей список идентификаторов элементов, однозначно определяющих файл в пространстве имен оболочки. PIDL должен быть полным идентификатором PIDL. Относительные ПИН-коды не допускаются.
Если параметр uFlags содержит флаг SHGFI_USEFILEATTRIBUTES , этот параметр не обязательно должен быть допустимым именем файла. Функция будет работать так, как если бы файл существует с указанным именем и атрибутами файла, переданными в параметре dwFileAttributes . Это позволяет получить сведения о типе файла, передав только расширение для pszPath и передав FILE_ATTRIBUTE_NORMAL в dwFileAttributes.
Эта строка может использовать короткие (форма 8.3) или длинные имена файлов.
dwFileAttributes
Тип: DWORD
Сочетание одного или нескольких флагов атрибутов файлов (FILE_ATTRIBUTE_ значений, как определено в Winnt.h). Если uFlags не содержит флаг SHGFI_USEFILEATTRIBUTES , этот параметр игнорируется.
[in, out] psfi
Тип: SHFILEINFO*
Указатель на структуру SHFILEINFO для получения сведений о файле.
cbFileInfo
Тип: UINT
Размер (в байтах) структуры SHFILEINFO , на которую указывает параметр psfi .
uFlags
Тип: UINT
Флаги, указывающие извлекаемые сведения о файле. Этот параметр может быть сочетанием следующих значений.
SHGFI_ADDOVERLAYS (0x000000020)
Версия 5.0. Примените соответствующие наложения к значку файла. Также необходимо задать флаг SHGFI_ICON .
SHGFI_ATTR_SPECIFIED (0x000020000)
Измените SHGFI_ATTRIBUTES , чтобы указать, что элемент dwAttributes структуры SHFILEINFO в psfi содержит нужные атрибуты. Эти атрибуты передаются в IShellFolder::GetAttributesOf. Если этот флаг не указан, 0xFFFFFFFF передается в IShellFolder::GetAttributesOf, запрашивая все атрибуты. Этот флаг нельзя указать с помощью флага SHGFI_ICON .
SHGFI_ATTRIBUTES (0x000000800)
Получение атрибутов элемента. Атрибуты копируются в элемент dwAttributes структуры, указанной в параметре psfi . Это те же атрибуты, которые получены из IShellFolder::GetAttributesOf.
SHGFI_DISPLAYNAME (0x000000200)
Получите отображаемое имя файла, которое является именем, отображаемым в Windows Обозреватель. Имя копируется в элемент szDisplayName структуры, указанной в psfi. В возвращаемом отображаемом имени используется длинное имя файла, если оно есть, а не форма имени файла 8.3. Обратите внимание, что на отображаемое имя могут влиять такие параметры, как отображение расширений.
SHGFI_EXETYPE (0x000002000)
Получите тип исполняемого файла, если pszPath идентифицирует исполняемый файл. Сведения упаковываются в возвращаемое значение. Этот флаг нельзя указать с помощью других флагов.
SHGFI_ICON (0x000000100)
Получите дескриптор значка, представляющего файл, и индекс значка в списке системных образов. Дескриптор копируется в элемент hIcon структуры, указанной в psfi, а индекс копируется в элемент iIcon .
SHGFI_ICONLOCATION (0x000001000)
Получение имени файла, содержащего значок, представляющий файл, указанный в pszPath, как возвращено методом IExtractIcon::GetIconLocation обработчика значков файла. Также получите индекс значка в этом файле. Имя файла, содержащего значок, копируется в элемент szDisplayName структуры, указанной в psfi. Индекс значка копируется в элемент iIcon этой структуры.
SHGFI_LARGEICON (0x000000000)
Измените SHGFI_ICON, в результате чего функция извлекает большой значок файла. Также необходимо задать флаг SHGFI_ICON .
SHGFI_LINKOVERLAY (0x000008000)
Измените SHGFI_ICON, в результате чего функция добавит наложение ссылки на значок файла. Также необходимо задать флаг SHGFI_ICON .
SHGFI_OPENICON (0x000000002)
Измените SHGFI_ICON, в результате чего функция извлекает значок открытия файла. Также используется для изменения SHGFI_SYSICONINDEX, в результате чего функция возвращает дескриптор в список системных образов, содержащий небольшой открытый значок файла. Объект контейнера отображает значок открытия, указывающий, что контейнер открыт. Также необходимо задать флаг SHGFI_ICON и (или) SHGFI_SYSICONINDEX .
SHGFI_OVERLAYINDEX (0x000000040)
Версия 5.0. Возвращает индекс значка наложения. Значение индекса наложения возвращается в верхних восьми битах элемента iIcon структуры, указанной в psfi. Для этого флага также требуется задать SHGFI_ICON .
SHGFI_PIDL (0x000000008)
Укажите, что pszPath является адресом структуры ITEMIDLIST , а не именем пути.
SHGFI_SELECTED (0x000010000)
Измените SHGFI_ICON, в результате чего функция будет смешивать значок файла с системным цветом выделения. Также необходимо задать флаг SHGFI_ICON .
SHGFI_SHELLICONSIZE (0x000000004)
Измените SHGFI_ICON, в результате чего функция получает значок размера оболочки. Если этот флаг не указан, функция масштабирует значок в соответствии со значениями системных метрик. Также необходимо задать флаг SHGFI_ICON .
SHGFI_SMALLICON (0x000000001)
Измените SHGFI_ICON, в результате чего функция извлекает небольшой значок файла. Также используется для изменения SHGFI_SYSICONINDEX, в результате чего функция возвращает дескриптор в список образов системы, содержащий небольшие изображения значков. Также необходимо задать флаг SHGFI_ICON и (или) SHGFI_SYSICONINDEX .
SHGFI_SYSICONINDEX (0x000004000)
Получение индекса значка списка системных образов. В случае успешного выполнения индекс копируется в элемент iIconpsfi. Возвращаемое значение является дескриптором для списка образов системы. Допустимы только те изображения, индексы которых успешно скопированы в iIcon . Попытка получить доступ к другим образам в списке системных образов приведет к неопределенному поведению.
SHGFI_TYPENAME (0x000000400)
Получите строку, описывающую тип файла. Строка копируется в элемент szTypeName структуры, указанной в psfi.
SHGFI_USEFILEATTRIBUTES (0x000000010)
Указывает, что функция не должна пытаться получить доступ к файлу, указанному в pszPath. Скорее, он должен действовать так, как если бы файл, указанный в pszPath , существует с атрибутами файла, переданными в dwFileAttributes. Этот флаг нельзя сочетать с флагами SHGFI_ATTRIBUTES, SHGFI_EXETYPE или SHGFI_PIDL .
Возвращаемое значение
Тип: DWORD_PTR
Возвращает значение, значение которого зависит от параметра uFlags .
Если uFlags не содержит SHGFI_EXETYPE или SHGFI_SYSICONINDEX, возвращается ненулевое значение в случае успешного выполнения или нулевое значение в противном случае.
Если uFlags содержит флаг SHGFI_EXETYPE , возвращаемое значение указывает тип исполняемого файла. Это будет одно из следующих значений.
Код возврата | Описание |
---|---|
|
Неисключаемый файл или условие ошибки. |
|
Приложение Windows. |
|
ФАЙЛ .exe или .com MS-DOS |
|
Консольное приложение или файл .bat |
Комментарии
Эту функцию следует вызывать из фонового потока. В противном случае пользовательский интерфейс перестанет отвечать на запросы.
Если SHGetFileInfo возвращает дескриптор значка в элементе hIcon структуры SHFILEINFO , на которую указывает psfi, вы несете ответственность за его освобождение с помощью DestroyIcon , когда он вам больше не нужен.
При использовании флага SHGFI_EXETYPE с приложением Windows версия исполняемого файла windows задается в HIWORD возвращаемого значения. Эта версия возвращается в виде шестнадцатеричного значения. Дополнительные сведения о том, как приравнять это значение к определенной версии Windows, см. в разделе Использование заголовков Windows.
Примеры
В следующем примере кода используется SHGetFileInfo для получения отображаемого имени корзины, определяемого ее PIDL.
LPITEMIDLIST pidl = NULL;
hr = SHGetFolderLocation(NULL, CSIDL_BITBUCKET, NULL, 0, &pidl);
if (SUCCEEDED(hr))
{
SHFILEINFOW sfi = {0};
hr = SHGetFileInfo((LPCTSTR)pidl,
-1,
&sfi,
sizeof(sfi),
SHGFI_PIDL | SHGFI_DISPLAYNAME)
if (SUCCEEDED(hr))
{
// The display name is now held in sfi.szDisplayName.
}
}
ILFree(pidl);
Примечание
Заголовок shellapi.h определяет SHGetFileInfo как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора UNICODE. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | shellapi.h |
Библиотека | Shell32.lib |
DLL | Shell32.dll (версия 4.0 или более поздняя) |