Сейчас на форуме: Magister Yoda, vasilevradislav, tyns777, zombi-vadim (+3 невидимых)

 eXeL@B —› Программирование —› Изменение иконок в ресурсах
Посл.ответ Сообщение

Ранг: 20.4 (новичок)
Активность: 0.020
Статус: Участник

Создано: 31 мая 2008 19:33
· Личное сообщение · #1

Возникла такая проблема - нужно программным способом заменить иконку в exe. Подскажите, как это правильно реализовать.
Я пытаюсь использовать UpdateResource; что-то в ресурсы добавляется, но в проводнике иконка не отображается и редакторы ресурсов её тоже не видят.
Долго искал, но решения так и не нашел.
В аттаче нерабочий исходник на фасме.

bb05_31.05.2008_CRACKLAB.rU.tgz - setic.ASM




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 31 мая 2008 20:22 · Поправил: Jupiter
· Личное сообщение · #2

в твоем сорсе ты зачем то вызываешь BeginUpdateResource со вторым параметром TRUE - это означает, что все существующие ресурсы будут удалены
к тому же ты нигде не проверяшь возвращаемые значения! ф-ции иногда завершаются с ошибкой, не забывай. Проверяя возвращаемые значения ты можешь локализовать ошибку.

примечание (MSDN):

lpData
[in]
Pointer to the resource data to be inserted into the executable file. If the resource is one of the predefined types, the data must be valid and properly aligned. Note that this is the raw binary data stored in the executable file, not the data provided by LoadIcon, LoadString, or other resource-specific load functions. All data containing strings or text must be in Unicode format; lpData must not point to ANSI data.


-----
EnJoy!




Ранг: 20.4 (новичок)
Активность: 0.020
Статус: Участник

Создано: 01 июня 2008 10:39
· Личное сообщение · #3

Jupiter пишет:
нигде не проверяшь возвращаемые значения

Учту. Ошибки вроде бы нет, с теми значениями, функция UpdateResource возвращает 1
Jupiter пишет:
Note that this is the raw binary data stored in the executable file, not the data provided by LoadIcon, LoadString, or other resource-specific load functions

Вот это не совсем понятно, т.е. в lpData ресурс должен быть в таком же виде, в каком он находиться в бинарнике?




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 01 июня 2008 14:08
· Личное сообщение · #4

ReZiDenT_USSR пишет:
т.е. в lpData ресурс должен быть в таком же виде, в каком он находиться в бинарнике?


если используются предустановленных типов (RT_CON в т.ч) - то да, ресурс должен быть выровнен и быть в "сыром" виде, каким он окажется в ресурсах

советую тебе использовать не файл .ico, а другой PE-файл, из которого ты будешь дёргать иконку через FindResource/LoadResource, тогда данные будут корректными

-----
EnJoy!




Ранг: 20.4 (новичок)
Активность: 0.020
Статус: Участник

Создано: 01 июня 2008 15:49
· Личное сообщение · #5

Jupiter пишет:
использовать не файл .ico, а другой PE-файл

Проблема, как раз в том, что иконку нужно доставать именно из ico.Исходников в сети практически не нашел.
Есть один на масме(см. аттач) но он тоже не работает, хотя реализация вроде бы понятна.

f661_01.06.2008_CRACKLAB.rU.tgz - seticon.asm




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 01 июня 2008 17:54
· Личное сообщение · #6

последний пример работает (я проверил) для иконок 32x32, см. исходник

-----
EnJoy!




Ранг: 20.4 (новичок)
Активность: 0.020
Статус: Участник

Создано: 01 июня 2008 21:27
· Личное сообщение · #7

Почитал про ico формат, переписал код, вроде бы работает но не со всеми .ico файлами

d15b_01.06.2008_CRACKLAB.rU.tgz - setic.ASM




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 01 июня 2008 22:48
· Личное сообщение · #8

учти, что в ICO может быть несколько форматов, в т.ч. и TrueColor c PNG-сжатием (используются в Vista)
вероятно имеет смысл сделать процедуру, выбирающую наиболее подходящую (например, 32x32 8 bit) при наличии нескольких иконок

-----
EnJoy!




Ранг: 52.1 (постоянный), 1thx
Активность: 0.020
Статус: Участник

Создано: 07 июня 2008 05:18
· Личное сообщение · #9

Давным давно ради эксперимента писал программку для смены иконки на Delphi - работает через раз, но может будет полезно.

a2b8_06.06.2008_CRACKLAB.rU.tgz - ChangeIconFromEXE.rar


 eXeL@B —› Программирование —› Изменение иконок в ресурсах
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати