Вторник, 20.02.2018, 04:38 Приветствую вас Гость | Группа "Гости" 


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: Anton93 
delfcode » Delphi » Процедуры и функции Delphi » Удалить MAINICON
Удалить MAINICON
Anton93Дата: Суббота, 04.01.2014, 13:08 | Сообщение # 1
Продвинутый
Зарегистрирован: 06.01.2010
Группа: Модераторы
Сообщений: 320
Статус: Offline
задача до боли глупая. имеется exe с ресурсами. ничем не упакован. т.е. ресурсы можно свободно заменять.
проблема встала в удалении иконки (MAINICON).
Реализовывал через UpdateResource, в итоге в файле каша.
Подскажите как правильно удалить ресурс чтобы не повредить структуру исполняемого файла. happy


ICQ: 41896
 
dolphinДата: Понедельник, 06.01.2014, 13:11 | Сообщение # 2
Администратор
Сообщений: 902
Статус: Offline
Особо нет времени на код, объясню в общих словах если ещё актуально с помощью UpdateResource получается занулить байты иконки, удалить не получится, но иконки физически не будет, останется пустое место

Доступно только для пользователей

код рабочий сам когда то ресурсы удалял и не только иконки


Система: Windows 10 x64, Windows XP
Среды программирования: Delphi 7, Delphi 10 Seattle

Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик
 
Anton93Дата: Понедельник, 06.01.2014, 13:16 | Сообщение # 3
Продвинутый
Зарегистрирован: 06.01.2010
Группа: Модераторы
Сообщений: 320
Статус: Offline
dolphin, конечно актуально. я уже кучу примеров перерыл. все убивали файл. позже проверю. спасибо)

ICQ: 41896
 
xXxSh@dowxXxДата: Понедельник, 06.01.2014, 13:43 | Сообщение # 4
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Очень интересная идея, только хотелось бы объединить с кодом выдергивания иконки и кодом вставки, то есть что бы в одной программе можно было выбрать exe в котором необходимо иконку затереть, далее выбрать другой файл иконка в котором нам понравилась, её вытащить и прописать в наши затертые байты.

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


Сообщение отредактировал xXxSh@dowxXx - Понедельник, 06.01.2014, 13:44
 
Anton93Дата: Вторник, 07.01.2014, 13:03 | Сообщение # 5
Продвинутый
Зарегистрирован: 06.01.2010
Группа: Модераторы
Сообщений: 320
Статус: Offline
dolphin, Заюзал код, выбивает туже самую ошибку, во время смены, что и у меня. Файл естественно опять битый loony

Прикрепления: 8259676.png(7Kb)


ICQ: 41896

Сообщение отредактировал Anton93 - Вторник, 07.01.2014, 13:04
 
xXxSh@dowxXxДата: Вторник, 07.01.2014, 13:55 | Сообщение # 6
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
я уже и так и эдак пробовал код изменять, обработка файла происходит, никаких ошибок не выдает, но и иконку не затирает wacko

подскажите под каким именем обычно ресурс с иконкой icon.res ?


Сообщение отредактировал xXxSh@dowxXx - Вторник, 07.01.2014, 14:05
 
Anton93Дата: Вторник, 07.01.2014, 14:09 | Сообщение # 7
Продвинутый
Зарегистрирован: 06.01.2010
Группа: Модераторы
Сообщений: 320
Статус: Offline
xXxSh@dowxXx, MAINICON

ICQ: 41896
 
xXxSh@dowxXxДата: Вторник, 07.01.2014, 14:10 | Сообщение # 8
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
MAINICON пробовал, все равно не получается sad

странно, проверял на скомпилированных в делфи проектах, иконка постоянно как будто восстанавливается, и файл не портится, а если на других программах, то иконка уходит но и файл умирает, я так понял запакованные файлы так затирать нельзя?

Anton93 подскажи пожалуйста RH - это THandle или все таки hfile ?


Сообщение отредактировал xXxSh@dowxXx - Вторник, 07.01.2014, 14:28
 
Anton93Дата: Вторник, 07.01.2014, 14:35 | Сообщение # 9
Продвинутый
Зарегистрирован: 06.01.2010
Группа: Модераторы
Сообщений: 320
Статус: Offline
RH это dword. другие ресурсы уничтожать выходит. но вот маиникон никак

ICQ: 41896
 
xXxSh@dowxXxДата: Вторник, 07.01.2014, 14:53 | Сообщение # 10
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Цитата Anton93 ()
RH это dword


В принципе я нашел наконец то как этот код работает, и RH может быть и THandle и hfile и DWORD работоспособность не изменяется, кстати на форуме уже была статья вот тут.

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


а вот имена и номера типов:
-------------
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

номера типов нужно для примера выше, с таким вот кодом:

PS: кто найдет способ затереть иконку без нарушения целостности файла, милости просим wink


Сообщение отредактировал xXxSh@dowxXx - Вторник, 07.01.2014, 15:15
 
Волк-1024Дата: Вторник, 07.01.2014, 22:29 | Сообщение # 11
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 467
Статус: Offline
Может пригодиться.
Прикрепления: acWorkRes.pas(41Kb)


Pascal, C\C++, Assembler, Python
 
xXxSh@dowxXxДата: Воскресенье, 12.01.2014, 14:48 | Сообщение # 12
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Подскажите пожалуйста, каким образом можно грабить иконки не только с исполняемых файлов и dll библиотек из ресурсов, но и из других файлов, у которых таких ресурсов нет, например .txt .bmp .jpg .gif и тп unsure ?
 
dolphinДата: Воскресенье, 12.01.2014, 17:30 | Сообщение # 13
Администратор
Сообщений: 902
Статус: Offline
xXxSh@dowxXx, открой ресурсы у shell32.dll иконки к таким стандартным файлам вроде бы там хранятся

Система: Windows 10 x64, Windows XP
Среды программирования: Delphi 7, Delphi 10 Seattle

Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик
 
xXxSh@dowxXxДата: Воскресенье, 12.01.2014, 20:40 | Сообщение # 14
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Цитата dolphin ()
открой ресурсы у shell32.dll иконки к таким стандартным файлам вроде бы там хранятся


это конечно понятно, но мне необходимо обрабатывать не только стандартные файлы системы, но и файлы запакованные различными пакерами, а их иконки в shell32.dll не хранятся, можно конечно обрабатывать РЕ файлы отдельно, и тащить иконки прямо из ресурсов, но писать код который будет отдельно доставать иконки из РЕ файлов через ресурсы, а системные иконки из dll это глупо не так ли?

И я решил сделать иначе, вот теперь ищу возможные варианты, нашел даже что файл иконки можно засунуть и в Bitmap и в Image но при сохранении иконка получается с очень низкой глубиной цвета, как качественно сохранить иконку я пока так и не нашел. sad


Сообщение отредактировал xXxSh@dowxXx - Воскресенье, 12.01.2014, 20:46
 
Волк-1024Дата: Понедельник, 10.02.2014, 02:50 | Сообщение # 15
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 467
Статус: Offline
http://www.delphibasics.info/home....erazerz тоже может поможет.

Pascal, C\C++, Assembler, Python
 
delfcode » Delphi » Процедуры и функции Delphi » Удалить MAINICON
Страница 1 из 11
Поиск:

delfcode.ru © 2008 - 2018 Хостинг от uCoz