Я пытаюсь извлечь пять форматов (размеров) значков, связанных с распространенными типами файлов (например, файлы PDF, DOCX, XLSX и т. д.).
У меня есть просмотрел бесчисленные сообщения на StackOverflow и других сайтах; все они объясняют различные методы извлечения связанных значков, и каждый метод имеет свои ограничения. (пример)
Для стандартных значков (например, папок) лучший способ извлечь все форматы изображений — использовать функцию SHGetStockIconInfo, чтобы получить местоположение файла стандартного значка и индекс значка, затем, вызвав SHDefExtractIcon, я могу извлечь значки желаемого размера.
Для распространенных типов файлов я пробовал различные методы. Большинство функций Win32 ограничены только двумя форматами изображений: маленьким (16x16) и большим (32x32). Я уверен, что в Windows11 почти все стандартные значки имеют такие форматы изображений, как 24x24 и 64x64. В некоторых интернет-сообщениях объясняется использование SHGetFileInfo для определения пути к файлу, содержащему значок; похоже, это не работает с Windows11 и .NET Framework 4.8.
Чтобы получить больше размеров значков, я использую SHGetFileInfo с SHGFI_SYSICONINDEX Флаги и SHGFI_USEFILEATTRIBUTES, за которыми следует SHGetImageList для извлечения значков различного размера. Но даже этот метод ограничен следующими размерами значков: 16x16, 32x32, 48x48 и 128x128. Я попытался вручную изменить размер изображения до 24 x 24 и 64 x 64, но в результате изображения получились слегка размытыми.
Мой вопрос: я уверен, что общие значки, доступные в системе Windows 11, имеют форматы изображений 24x24 и 64x64, встроенные в файлы библиотеки значков; как мне извлечь эти значки? Было бы здорово иметь возможность извлекать значок, связанный с расширением файла (для которого файл не обязательно должен существовать), размером 16, 24, 32, 48 и 64.
Подробнее здесь: https://stackoverflow.com/questions/786 ... -file-type