задача до боли глупая. имеется exe с ресурсами. ничем не упакован. т.е. ресурсы можно свободно заменять.
проблема встала в удалении иконки (MAINICON).
Реализовывал через UpdateResource, в итоге в файле каша.
Подскажите как правильно удалить ресурс чтобы не повредить структуру исполняемого файла. ICQ: 41896
Дата: Понедельник, 06.01.2014, 13:11 | Сообщение # 2
Администратор
Сообщений: 897
Статус: 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
Администратор
Сообщений: 897
Статус: Offline
xXxSh@dowxXx, открой ресурсы у shell32.dll иконки к таким стандартным файлам вроде бы там хранятся Система: Windows 10 x64, Windows XP
Среды программирования: Delphi 7, Delphi 10 Seattle
Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик
Дата: Воскресенье, 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