В ресурсах исполняемого файла как найти значок по умолчанию? - PullRequest
4 голосов
/ 17 июля 2010

Мне нужно найти значок по умолчанию исполняемого файла Windows (PE файл = dll, exe, com ..) программно. Я знаю, как пройтись по ресурсам и определить, что такое значок, что такое курсор и т. Д., Но, насколько я знаю, ни один из значков никоим образом не помечен как значок по умолчанию. Итак, кто-нибудь знает, как найти значок по умолчанию? Более того, я не хочу использовать какой-либо вызов Windows API, я хочу сам кодировать функцию. Проблема в том, что я не знаю, какой из значков является значком по умолчанию.

Ответы [ 2 ]

6 голосов
/ 17 июля 2010

После долгих поисков я обнаружил, что значок по умолчанию не тот, с самым низким идентификатором.

Windows использует несколько размеров одного значка для разных вещей. Для получения дополнительной информации смотрите здесь , но вкратце вот важная информация:


Когда система отображает значок, она должна извлечь соответствующее изображение значка из файла .exe или .dll. Система использует следующие шаги для выбора изображения значка:

  1. Выберите ресурс RT_GROUP_ICON. Если более одного такого ресурса существует, система использует первый ресурс, указанный в ресурсе сумы.

    • Выберите соответствующее изображение RT_ICON из ресурса RT_GROUP_ICON. Если существует более одного изображения, Система использует следующие критерии выбрать изображение:

    • Изображение, наиболее близкое по размеру к запрашиваемый размер выбран.

    • Если два или более изображения этого размера присутствуют, тот, который соответствует глубина цвета дисплея выбрана.

    • Если изображения не соответствуют цвету глубина отображения, изображение с наибольшая глубина цвета, которая делает не превышать глубину цвета дисплей выбран. Если все превышают глубина цвета, самая низкая глубина цвета выбрана.

Примечание: Система обрабатывает все глубины цвета 8 или более пикселей на дюйм как равные. Следовательно, нет никакого преимущества в том, чтобы включать 256-цветное изображение 16x16 и 16-цветное изображение 16x16 в один и тот же ресурс - система просто выберет первое, с которым сталкивается. Когда дисплей находится в режиме 8 бит / с, система выберет 16-цветный значок вместо 256-цветного значка и отобразит все значки, используя системную палитру по умолчанию.


Поскольку запрашиваемый размер составляет 16x16 (потому что это маленький размер значков системы, т.е. размер значков по умолчанию), я думаю, мы можем сказать, что значком по умолчанию является значок из первой группы значков, который имеет наименьший размер (может существовать не меньший значок, чем 16x16) с максимальной глубиной цвета.

РЕДАКТИРОВАТЬ: небольшая коррекция. Вероятно, в ресурсах может быть значок размером менее 16x16, но это означает, что у файла нет значка по умолчанию, и система вместо этого предоставляет собственный значок.

3 голосов
/ 17 июля 2010

Первый найденный по умолчанию.

Значок по умолчанию - это просто значок с самым низким идентификатором, поэтому по определению это первый значок, обнаруженный при перечислении ресурсов.

...