Где найти значки по умолчанию, используемые для папок и приложений? - PullRequest
3 голосов
/ 20 января 2009

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

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

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

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

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


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

Ответы [ 8 ]

13 голосов
/ 20 января 2009

Используйте API SHGetFileInfo .

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. Кроме того, если вы извлечете значки из системных библиотек / библиотек, у вас могут возникнуть проблемы с законом, поскольку они защищены авторским правом.

7 голосов
/ 16 февраля 2009

Vista добавлена ​​ SHGetStockIconInfo и так далее для NT6 + это лучший способ.

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

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

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

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

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

2 голосов
/ 20 января 2009

Выбранный значок пользователя можно найти в реестре на HKEY_CLASSES_ROOT\Folder\DefaultIcon

Посмотрев здесь значение, вы также узнаете, изменили ли они его по какой-либо причине.

Для папок, в которых существует файл desktop.ini, вам нужно прочитать записи IconFile и IconIndex.

2 голосов
/ 20 января 2009

В Visual Studio:

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

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

2 голосов
/ 20 января 2009

Я думаю, они находятся в% windir% \ system32 \ SHELL32.dll

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

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, может выглядеть иначе, чем версия того же значка в полном разрешении.

1 голос
/ 20 января 2009

Если вы находитесь в MFC, следующий код для загрузки значков должен работать.


    HICON hicon;
    hicon = LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON1));   

В приведенном выше примере AfxGetResourceHandle () - единственное, где используется MFC, в противном случае LoadIcon - это вызов API, насколько я помню.

Иконки доступны в windows \ system32 \ shell32.dll

Если у вас установлена ​​Visual Studio, то Visual Studio также поставляется с набором значков по следующему пути: C: \ Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ VS2008ImageLibrary.

0 голосов
/ 18 мая 2009

это намного проще, просто откройте shell32.dll с помощью хакера ресурсов и щелкните правой кнопкой мыши на «ЗНАЧКИ» и сохраните все иконки ресурса в каталоге.

, и вы получите все значки окон по умолчанию в этом каталоге.

[ссылка] http://www.angusj.com/resourcehacker/[/link]

0 голосов
/ 20 января 2009

Это, вероятно, в explorer.exe.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...