Получите значки для типов общего файла

Это было что-то с Filewatcher. Два случая его запуска - развертывание одного и того же приложения 2x на устройстве. Трудно объяснить.

Я Hardware > Erase all content and settings.., убил мой терминал, открыл новый и побежал tns run ios.

11
задан Shog9 7 February 2009 в 17:31
поделиться

2 ответа

Shell API

Можно получить их от оболочки путем вызова SHGetFileInfo() наряду с SHGFI_USEFILEATTRIBUTES флаг - этот флаг позволяет стандартной программе работать, не требуя, чтобы имя файла передало в на самом деле существовать, поэтому если у Вас есть расширение файла, просто составляют имя файла, добавляют расширение и передают его в.

Путем объединения других флагов Вы сможете получить:

  • Большой или маленький значок, как определено конфигурацией системы: SHGFI_ICON|SHGFI_LARGEICON или SHGFI_ICON|SHGFI_SMALLICON
  • Большой или маленький значок, как определено конфигурацией оболочки: SHGFI_ICON|SHGFI_LARGEICON|SHGFI_SHELLICONSIZE или SHGFI_ICON|SHGFI_SMALLICON|SHGFI_SHELLICONSIZE
  • Индекс значка в списке изображений оболочки наряду с соответствующим списком изображений: SHGFI_SYSICONINDEX
  • Путь и имя файла фактического модуля, где значок хранится (наряду с индексом значка в том модуле): SHGFI_ICONLOCATION

Примеры

// Load a System Large icon image
SHGetFileInfo( szFileName, FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(SHFILEINFO), 
   SHGFI_USEFILEATTRIBUTES | SHGFI_ICON | SHGFI_LARGEICON);

// Load a System Small icon image
SHGetFileInfo( szFileName, FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(SHFILEINFO), 
   SHGFI_USEFILEATTRIBUTES | SHGFI_ICON | SHGFI_SMALLICON);

// Load a Shell Large icon image
SHGetFileInfo( szFileName, FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(SHFILEINFO), 
   SHGFI_USEFILEATTRIBUTES | SHGFI_ICON | SHGFI_SHELLICONSIZE);

// Load a Shell Small icon image
SHGetFileInfo( szFileName, FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(SHFILEINFO), 
   SHGFI_USEFILEATTRIBUTES 
   | SHGFI_ICON | SHGFI_SHELLICONSIZE | SHGFI_SMALLICON);

Если Вы хотите потянуть такой значок, используйте что-то вроде этого:

// Draw it at its native size
DrawIconEx( hDC, nLeft, nTop, hIcon, 0, 0, 0, NULL, DI_NORMAL );

// Draw it at the System Large size
DrawIconEx( hDC, nLeft, nTop, hIcon, 0, 0, 0, 
            NULL, DI_DEFAULTSIZE | DI_NORMAL );

// Draw it at some other size (40x40 in this example)
DrawIconEx( hDC, nLeft, nTop, hIcon, 40, 40, 0, NULL, DI_NORMAL );

Дескриптор значка, а также путь файловой системы может быть получен из SHFILEINFO структура:

typedef struct _SHFILEINFOA
{
        HICON       hIcon;                      // out: icon
        int         iIcon;                      // out: icon index
        DWORD       dwAttributes;               // out: SFGAO_ flags
        CHAR        szDisplayName[MAX_PATH];    // out: display name (or path)
        CHAR        szTypeName[80];             // out: type name
} SHFILEINFOA;

Следует иметь в виду, что необходимо освободить полученный значок путем передачи hIcon кому: DestroyIcon() после того, как Вы сделаны с ним.

20
ответ дан 3 December 2019 в 07:14
поделиться

Определите информацию о значке из реестра, объединенного типа файла и программы, которая обрабатывает файл и извлекает значок из файла. http://www.codeproject.com/KB/shell/iconextract.aspx

-3
ответ дан 3 December 2019 в 07:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: