VS откроет файл с помощью обозревателя ресурсов. Теперь вы можете просмотреть все иконки и другие ресурсы, встроенные в shell32.dll.

аюсь загрузить HICON по умолчанию, для которого отображается проводник:

Открытая папкаExe, который не имеет собственного встроенного значка по умолчанию. Это также можно увидеть в «Установка и удаление программ» или «Программы и компоненты», как это называется в Vista.

Вы знаете, где их можно найти? Я думаю, что значок папки может быть в ресурсах explorer.exe. Но понятия не имею, откуда можно получить значок приложения по умолчанию.

И, кроме того, у вас есть пример кода, который может загрузить их в HICON.

Мне действительно нужно это для работы на нескольких ОС Windows: 2000, XP, Vista, 2008

Спасибо за помощь. Я на Vista и посмотрел через Shell32.dll. Я не вижу там значка, который выглядит так же, как значок по умолчанию, отображаемый приложением в проводнике. Я мог бы пропустить это - есть 278 значков для просмотра - это определенно там, или есть какое-то другое место, которое я должен посмотреть?

Ответы на вопрос(4)

SHGetStockIconInfo и так на NT6 + это лучший способ.

Архив документации MSDN, которая показывает доступные значки

На старых платформахSHGetFileInfo как говорит Стефан.

Если вы хотите использовать недокументированные материалы, первые 5 или около того значков в списке системных образов включают папку по умолчанию и значок приложения (системный список образов НЕ является общим для NT, но по какой-то причине все копии получают первые 5 или около того значки, не спрашивая их сSHGetFileInfo)

Эти значки по умолчанию приходят из shell32.dll по умолчанию, но могут быть изменены в реестре:

HKLM \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Icons

Решение Вопроса

Нашел какой-то код в интернете, попробуйте, если это работает:

HINSTANCE hDll;
hDll = LoadLibrary ( "SHELL32.dll" );
wincl.hIcon   = LoadIcon (hDll , MAKEINTRESOURCE ( 1 ));
wincl.hIconSm = LoadIcon (hDll, MAKEINTRESOURCE ( 2 ));

Изменить: Windows имеет гораздо больше значков в "moricons.dll", но я думаю, все значки файлов и папок должны быть в shell32.dll. Напомним, что значки в Vista имеют разные разрешения, вплоть до 256x256, поэтому значок, который вы смотрите в разрешении 32x32, может выглядеть иначе, чем версия того же значка в полном разрешении.

 Craig Silver18 мая 2018 г., 19:40
Я знаю, что этот комментарий не добавляет к OP, но вы должны попробовать это. Я только что открыл%systemroot%\system32\moricons.dll на моем компьютере с Windows 10 (я использовалnirsoft.net/utils/iconsext.html) и очутился во временной деформации! Это из Windows 95? 3,1? Это фантастика! Не то чтобы я их использовал.
 Anders16 февр. 2009 г., 04:32
Значки в shell32 являются значениями по умолчанию, но их можно изменить в HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Icons Все это в любом случае недокументировано и не должно использоваться. Используйте SHGetFileInfo () и / или SHGetStockIconInfo ()

нажмите на Файл | Открытьвыберите C: \ WINDOWS \ System32 \ Shell32.dll

VS откроет файл с помощью обозревателя ресурсов. Теперь вы можете просмотреть все иконки и другие ресурсы, встроенные в shell32.dll.

ИспользоватьSHGetFileInfo API.

SHFILEINFO sfi;
SecureZeroMemory(&sfi, sizeof sfi);

SHGetFileInfo(
    _T("Doesn't matter"),
    FILE_ATTRIBUTE_DIRECTORY,
    &sfi, sizeof sfi,
    SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);

Вы получите ручку значка к значку папки.

Чтобы получить значок «открыть» (т. Е. Значок, где папка показана как открытая), также передайте SHGFI_OPENICON в последнем параметре в SHGetFileInfo ().

[редактировать]

игнорируйте все ответы, которые говорят вам, чтобы выискивать в реестре! Потому что это не будет работать надежно, будет отображать неправильные значки, если они настроены / скины и могут не работать в будущих версиях Windows. Кроме того, если вы извлекаете значки из системных библиотек / библиотек, вы можете столкнуться с юридическими проблемами, поскольку они защищены авторским правом.

Ваш ответ на вопрос