|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.02.2014, 15:34 | #1 |
Форумчанин
Регистрация: 06.08.2009
Сообщений: 144
|
Запись данных об иконке в ресурсы PE файла
Приветствую!
Все таки разобрался, как устроены ресурсы, отвечающие за иконку в PE файлах. Параллельно понял устройство и *.ico файлов, ибо это практически одно и то-же. Разница в 2 байтах заголовка сущности. Это RT_GROUP_ICON с именем `MAINICON` и один или несколько ресурсов RT_ICON с целочисленным именем, скажем от 1 до n. Сделал свой класс. Который, идеально читает как *.ico файл, так и PE. Отображает количество сущностей, данные и т.д. Идеально сохраняет в *.ico файл, с любым количеством сущностей. Хоть 1, хоть 10. Контрольная сумма совпадает полностью, с оригинальной *.ico иконкой (которую, я потом поместил в PE-Донора, при компилляции). Вот с сохранением в ресурсы PE, собственно ради чего все это и писалось, проблема. Да будь одна неладна... Иконку из одной сущности, маленького размера, взятая либо с другого PE файла, либо с иконки - записывает. Иконку из 10 сущностей, красивую, Vista Ready... Не записывает. ResourceHacker отказывается показывать RT_GROUP_ICON и RT_ICON с 6 по 10. При этом, если не записывать иконки - ресурс RT_GROUP_ICON записывается отлично, побайтно (все контрольные суммы совпадают) равен аналогичному ресурсу в PE-Доноре иконке. При этом, иконки с 1 по 5 - записываются хорошо, правда не дошли руки проверить контрольные суммы. Собственно код: Второй вариант, первый был запутанный, вызывающий общие процедуры, использующиеся при сохранении в *.ico файл, и работающие 100% в том случае. Код:
Ошибок никаких не возникает, значит все функции возвращают истину! Есть ли какие то ограничения у BeginUpdateResource, UpdateResource, EndUpdateResource? Я ведь понимаю правильно, что можно UpdateResource - вызывать столько раз, сколько нужно? Пробовал каждый раз вызывать эту "святую троицу", так вообще - все ресурсы затерлись к чертовой бабушке! Были только иконки с 6 по 10! (Что кстати странно...) P.S. Пробовал заюзать этот. Еще, не может ли быть виновата сама иконка? Размер сущностей, количество... Но с другой стороны, Delphi то нормально скомпиллировало приложение с этой иконкой? - значит не должно быть в этом дело... Внимание! Если Вам нечего сказать по теме данного сообщения, пожалуйста, пройдите мимо не написав ничего! Заранее спасибо! А то проблема остается, решить не получается, и помощи получить мешают некоторые обстоятельства и события! |
21.02.2014, 20:43 | #2 |
Форумчанин
Регистрация: 06.08.2009
Сообщений: 144
|
Кажется нашел...
Причину, по которой код отказывался правильно сохранять иконку (точнее ее потроха) по разным, нужным, ресурсам PE файла. Все дело было, в сущности Размером 256х256 (Vista Ready Icon)! По каким-то странным причинам, именно из-за этого бьется ресурс(ы). Более того, при попытке отобразить эту иконку (Build Single Ico -> Stream -> TIcon -> TImage) - выдается AV! С другими разрешениями, вплоть до х128 включительно - работает как часы. Вот небольшая тестовая программка: Скачать Все кнопки без исключения работают, но на мой взгляд - то ради чего, все делалось - это последняя кнопка. Удаляет старый *.exe файл (с именем "Test.exe"), копирует на его место новый (Источником служить Bolvanka_Z.exe) и заменяет иконку! Но что делать с х256? Какие могут быть идет по этому поводу? Опять-же, Delphi отлично компиллирует это дело. Пример, как раз в IconResource.exe, иконка с индексом 6! Ага! 6 иконка! Вот после записи ее и слетало все) P.S. Если отображает количество цветов, равное 0 - это значит, что больше 8 миллионов цветов. Если отображает размер 0 - это 256. В архив входят несколько иконок, в том числе многослойные. |
21.02.2014, 20:58 | #3 |
Форумчанин
Регистрация: 06.08.2009
Сообщений: 144
|
x64 Poptable Executable
Тоже "прожигаются" нормально, если нет 256х256 сущности иконки! Вот болванка x64 Сохранить с помощью кнопки "Save to PE", с указание пути до "Test_x64.exe" |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Запись данных об иконке в ресурсы PE файлов | STRELOK-2007 | Общие вопросы Delphi | 21 | 21.02.2014 15:14 |
сортировка данных из файла и запись на Си | gunz93 | Помощь студентам | 0 | 27.02.2013 14:55 |
получение данных из файла и запись этих данных в другой. | Jurii77 | Microsoft Office Excel | 9 | 23.11.2011 09:42 |
Запись на файл/чтение данных с файла | stas135642 | Общие вопросы C/C++ | 11 | 25.02.2011 13:33 |
Запись в ресурсы собственного exe? | Человек_Борща | Общие вопросы Delphi | 3 | 02.08.2010 15:19 |