Вверх ↑
Этот топик читают: Гость
Ответов: 574
Рейтинг: 1
#1: 2007-01-05 16:48:00 ЛС | профиль | цитата
Делал, помню, проект по смене в программах, сделанных в MMB, иконок. Не зря делал: нужна там такая фишка.. Просто MMB пока XP иконки сама вставлять не даёт… Но это предисловие Так вот, делается это не хитро: просто распаковываю проект upx’ом, ResHacker’ом меняю иконку и upx’ом запаковываю. А вот как мне БЕЗ ResHacker’a средствами HiAsm иконку поменять? Думаю, можно это сделать! А вот как - пока знаний не хватает… А ведь моя утилита кило на 400 весить меньше будет, вот в чём есть гуд!

Часть схемы с Хакером вот такая:

Add(WinExec,12987331,173,96)
{
Param="-addoverwrite "ПУТЬ_К_ФАЙЛУ", "ПУТЬ_К_ФАЙЛУ", "ПУТЬ_К_ИКОНКЕ", ICONGROUP,10000,0"
FileName="reshacker.exe"
Mode=0
RunEvent=1
Point(doConsoleExec)
Point(onConsoleResult)
}

Буду очень благодарен всем, кто поможет!
карма: 0

0
Ответов: 241
Рейтинг: 45
#2: 2007-01-06 00:39:41 ЛС | профиль | цитата
Да в принципе не сложно это сделать, если сам будешь разбираться, выложу пару примеров работы с исполняемыми файлами, а то у меня сессия на носу, некогда
Я делал компонент, но как то потерял интерес к этому.
Именно с иконками не работал, но думаю по аналогии с секциями:
1 находишь физический адрес иконки в файле и ее размер
2 заменяешь полученный блок своей иконкой
3 вписываешь новый размер
Это самый простой вариант. Сложности могут быть с остальными адресациями, если не уложишься в определенный размер, возможно придется вносить дополнительные правки.
Будешь делать, помогу, чем смогу
карма: 0

0
Ответов: 241
Рейтинг: 45
#3: 2007-01-06 00:47:18 ЛС | профиль | цитата
P.S: Без UPX-a тоже можно обойтись, алгоритм его расшифровки в нете довольно несложно найти
карма: 0

0
Ответов: 3655
Рейтинг: 69
#4: 2007-01-06 00:52:33 ЛС | профиль | цитата
CASPER, Если можно ещё раз и по русски.
CASPER писал(а):
проект по смене в программах
где иконка то в exe файле
CASPER писал(а):
пока XP иконки сама вставлять не даёт
Куда недаёт.
ResHacker_ом ты достаёшь иконку Если Да то могу дать такую же прогу но написанную на Делфи с применением KOL_a. Достаёт любые картинки из любого файла.
Весит намного меньше
карма: 0

0
Ответов: 574
Рейтинг: 1
#5: 2007-01-06 13:36:08 ЛС | профиль | цитата
Wolfik писал(а):
Будешь делать, помогу, чем смогу


Конечно, буду ждать примеры! Спасибо!

Вячеслав писал(а):
где иконка то в exe файле


Что-что? Любой файл имеет иконку. Вопрос непонятный...

Вячеслав писал(а):
Куда недаёт.


При компиляции проектов в Multimedia Builder можно выбирать иконки 16 и 256 цветов. А если хочешь полноцветные использовать - можно сделать утилиту для замены иконок, что я и сделал, но размер в 500 КБ меня и юзеров не устраивает... Ведь это точно можно сделать без РесХакера средствами HiAsm!

Хотелось бы ещё послушать, что скажет tsdima, например... Мудрый человек ...

И такой вопрос: о чём в приведённой выше мною схеме говорит

ICONGROUP,10000,0[/code]

:?: Просто я никогда с HEX редакторами не работал. Точнее, открывал - но что, да как - понять не смог... Учусь ведь пока в колледже на программера, но только начал... Знаний не хватает, чесслово! А моё время ещё прийдёт, думаю... ;)
карма: 0

0
Ответов: 3655
Рейтинг: 69
#6: 2007-01-06 14:57:56 ЛС | профиль | цитата
CASPER,
CASPER писал(а):
Что-что? Любой файл имеет иконку. Вопрос непонятный...

Это мне непонятно из какакого файла надо вынуть иконку
Кто то только недавно делал прогу для извлечения иконок должна быть в upload
Короче посмотри здесь http://kolmck.net/rindex.htm
карма: 0

0
Ответов: 574
Рейтинг: 1
#7: 2007-01-06 15:15:00 ЛС | профиль | цитата
Вячеслав писал(а):
Это мне непонятно из какакого файла надо вынуть иконку


Из скомпилированного проекта! Тоже самое, что в HiAsm - ты проект скомпилировал и мне надо не ВЫНУТЬ, а ИЗМЕНИТЬ иконку! И проги разные мне не нужны. Я сделал специальную утилиту для этого...

Чего вот мудрые-то молчат?..
карма: 0

0
Ответов: 574
Рейтинг: 1
#8: 2007-01-06 19:22:43 ЛС | профиль | цитата
Наш уважаемый Автор предложил мне по аське кое-чаго, а вот дальше от него не добился - аську глючит... Чем поможете?

Dilma (18:00:12 6/01/2007)
procedure TForm1.UpdateIcon;
var
st:PStream;
Size:integer;
k:string;
lpResLock: pointer;
hUpdateRes:THandle;
begin
if Icon.Empty then exit;
Icon.SaveToFile('~temp.ttt');
st := NewReadFileStream('~temp.ttt');
st.Position := 22;
Size := st.Size - st.Position;
SetLength(k,Size);
st.Read(k[1],Size);
lpResLock := @k[1];

hUpdateRes := BeginUpdateResource(PChar(FileName), false);
UpdateResource(hUpdateRes,RT_ICON,PChar(2),LANG_NEUTRAL, lpResLock,Size);
EndUpdateResource(hUpdateRes, FALSE);

st.Free;

DeleteFile('~temp.ttt');
end;

Dilma (18:00:20 6/01/2007)
procedure UpdateIcon(Icon:TIcon; const FileName:string);

Yuriy (18:00:52 6/01/2007)
А можешь портировать под IC?

Dilma (18:02:58 6/01/2007)
меняешь TIcon на PIсon а поток на PStream

Спасибо!
карма: 0

0
Ответов: 241
Рейтинг: 45
#9: 2007-01-06 23:44:33 ЛС | профиль | цитата
Вот реализация того что предложил тебе Dilma
Почемуто не работает, хотя чтото в файле происходит, по крайней мере размер больше становится
Попробуй сам разобраться, возможно дело в этом
UpdateResource(hUpdateRes,RT_ICON,PChar(2),LANG_NEUTRAL, lpResLock,Size);

code_768

P.S. Можно обойтись и без промежуточного сохранения, оптимизируй сам, но не гарантия что это позволит загружать в файл мульти иконки, т.е. содержащие в себе несколько разного размера.
карма: 0

0
файлы: 1code_768.txt [2.6KB] [282]
Ответов: 574
Рейтинг: 1
#10: 2007-01-07 00:21:33 ЛС | профиль | цитата
Wolfik писал(а):
Попробуй сам разобраться


Нет, я пока дуб в этом... Вот через годик такое можно мне сказать, а сейчас...

Спасибо за попытку помочь!

[size=-2]------ Добавлено в 00:21
Сейчас посмотрел пример: работает!!! Но только exe не запускается... А иконка меняется. При запуске вот такая кака:

Corrupted Stand Alone file (1)


Это с прогами от MMB. С прогами HiAsm - всё прекрасно! Так в чём же дело в первом случае? Как думаете?

У тебя пример не работал, думаю, потому, что ты забыл exe распаковать...
карма: 0

0
Ответов: 241
Рейтинг: 45
#11: 2007-01-07 01:18:56 ЛС | профиль | цитата
Это из-за защиты самой проги средой MMB.
У меня в настройках HiAsm вообще сжатие не стоит, я UPX-ом не пользуюсь.
карма: 0

0
Ответов: 574
Рейтинг: 1
#12: 2007-01-07 21:46:30 ЛС | профиль | цитата
Wolfik, я сейчас посидел и сделал кое-какие выводы. Я распаковал программу, скомпилированную в MMB, upx’ом и упаковал WinUpack ради интереса, то есть хотел узнать, что лучше сжимает файлы. Последний победил. Но при сжатии если не выбирать опцию «сохранить дополнительные данные» программа от MMB запускается с той же ошибкой, что и при смене иконки твоим проектом (выше)! Потому я поставил галочку, и с сохранение дополнительных данных программа стала запускаться, но и сжатие меньше стало. Это я к чему? Просто я заметил, что после смены иконки твоим примером, программа от MMB стала весить вдвое меньше! То есть, могу предположить, что в коде тоже есть сжатие. И оно «неправильное».

Теперь есть какие мысли?

И ещё: при смене иконки, программа приобретает иконку меньшего цвета… Почему?

Большое спасибо за помощь!
карма: 0

0
12
Сообщение
...
Прикрепленные файлы
(файлы не залиты)