задача до боли глупая. имеется exe с ресурсами. ничем не упакован. т.е. ресурсы можно свободно заменять. проблема встала в удалении иконки (MAINICON). Реализовывал через UpdateResource, в итоге в файле каша. Подскажите как правильно удалить ресурс чтобы не повредить структуру исполняемого файла. ICQ: 41896
Дата: Понедельник, 06.01.2014, 13:11 | Сообщение # 2
Администратор
Сообщений: 906
Статус: Offline
Особо нет времени на код, объясню в общих словах если ещё актуально с помощью UpdateResource получается занулить байты иконки, удалить не получится, но иконки физически не будет, останется пустое место
Дата: Понедельник, 06.01.2014, 13:43 | Сообщение # 4
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Очень интересная идея, только хотелось бы объединить с кодом выдергивания иконки и кодом вставки, то есть что бы в одной программе можно было выбрать exe в котором необходимо иконку затереть, далее выбрать другой файл иконка в котором нам понравилась, её вытащить и прописать в наши затертые байты.
Хотя бы для того что бы потом не искать код частями, а все необходимые функции для работы с иконками в одном месте так сказать.
Сообщение отредактировал xXxSh@dowxXx - Понедельник, 06.01.2014, 13:44
странно, проверял на скомпилированных в делфи проектах, иконка постоянно как будто восстанавливается, и файл не портится, а если на других программах, то иконка уходит но и файл умирает, я так понял запакованные файлы так затирать нельзя?
Anton93 подскажи пожалуйста RH - это THandle или все таки hfile ?
Сообщение отредактировал xXxSh@dowxXx - Вторник, 07.01.2014, 14:28
В принципе я нашел наконец то как этот код работает, и RH может быть и THandle и hfile и DWORD работоспособность не изменяется, кстати на форуме уже была статья вот тут.
вот рабочий код, но как Anton93 ты уже верно подметил другие ресурсы удаляются нормально, а вот иконки никак:
Код
procedure TForm1.Button1Click(Sender: TObject); var RH: THandle; begin RH:=BeginUpdateResource(PChar('test.exe'),False); UpdateResource(RH,RT_ICON,PChar('1'),LANG_NEUTRAL,nil,0); UpdateResource(RH,RT_GROUP_ICON,PChar('MAINICON'),LANG_NEUTRAL,nil,0); //UpdateResource(RH,RT_RCDATA,PChar('DVCLAL'),LANG_NEUTRAL,nil,0); //UpdateResource(RH,RT_RCDATA,PChar('PACKAGEINFO'),LANG_NEUTRAL,nil,0);// EndUpdateResource(RH,FALSE); end;
а вот имена и номера типов: ------------- RT_CURSOR 1 RT_BITMAP 2 RT_ICON 3 RT_MENU 4 RT_DIALOG 5 RT_STRING 6 RT_FONTDIR 7 RT_FONT 8 RT_ACCELERATOR 9 RT_RCDATA 10 RT_MESSAGETABLE 11 RT_GROUP_CURSOR 12 RT_GROUP_ICON 14 RT_VERSION 16 RT_DLGINCLUDE 17 RT_PLUGPLAY 19 RT_VXD 20 RT_ANICURSOR 21 RT_ANIICON 22
номера типов нужно для примера выше, с таким вот кодом:
Дата: Воскресенье, 12.01.2014, 14:48 | Сообщение # 12
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Подскажите пожалуйста, каким образом можно грабить иконки не только с исполняемых файлов и dll библиотек из ресурсов, но и из других файлов, у которых таких ресурсов нет, например .txt .bmp .jpg .gif и тп ?
Дата: Воскресенье, 12.01.2014, 17:30 | Сообщение # 13
Администратор
Сообщений: 906
Статус: Offline
xXxSh@dowxXx, открой ресурсы у shell32.dll иконки к таким стандартным файлам вроде бы там хранятся Система: Windows 10 x64, Kali Linux Среды программирования: Delphi 7, Delphi 10.x
Я не профессионал, я всего лишь любитель Я не вредитель, я всего лишь теоретик
Дата: Воскресенье, 12.01.2014, 20:40 | Сообщение # 14
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Цитатаdolphin ()
открой ресурсы у shell32.dll иконки к таким стандартным файлам вроде бы там хранятся
это конечно понятно, но мне необходимо обрабатывать не только стандартные файлы системы, но и файлы запакованные различными пакерами, а их иконки в shell32.dll не хранятся, можно конечно обрабатывать РЕ файлы отдельно, и тащить иконки прямо из ресурсов, но писать код который будет отдельно доставать иконки из РЕ файлов через ресурсы, а системные иконки из dll это глупо не так ли?
И я решил сделать иначе, вот теперь ищу возможные варианты, нашел даже что файл иконки можно засунуть и в Bitmap и в Image но при сохранении иконка получается с очень низкой глубиной цвета, как качественно сохранить иконку я пока так и не нашел.
Сообщение отредактировал xXxSh@dowxXx - Воскресенье, 12.01.2014, 20:46