Форум » GUI » Формат иконок в ехе-файле ? » Ответить

Формат иконок в ехе-файле ?

Andrey: Всем привет ! Кто знает в каком формате Borland 5.51 сохраняет иконки в ресурсах ехе-файла ? По идеи должны быть PE32 ресурсы, но может я не прав... Если это не PE32 ресурсы, то как привести иконки в PE32 ? Вот тестовый пример - https://cloud.mail.ru/public/3mNs/eVp4CfLFE

Ответов - 52, стр: 1 2 3 All

Haz: Andrey пишет: Кто знает в каком формате Borland 5.51 сохраняет иконки в ресурсах ехе-файла ? расшифруй - PE - Portable Executable это основной формат хранения исполнимых файлов в ОС Windows - Borland 5.51 - 32 разрядный компилятор , из него ilink32 тупо берет res файл и клеит его в PE - res файл формируется компилятором ресурсов brcc32 - формат хранения иконок - ICON , такой как задан в rс файле при описании Поскольку иконки в ресурсе описали как тип ICON , bcc при работе приложения будет обрабатывать их используя функцию LoadIcon()

Andrey: Haz пишет: расшифруй Да я тут в техподдержку бывшего Алладина (http://www.safenet-sentinel.ru/) написал письмо, а они мне в ответ пишут что формат иконок не тот. "Если иконки не защищаются – значит они вероятнее всего не относятся к PE32 ресурсам, а следовательно Envelope их защищать и не будет." Вот я и озадачился в каком формате Борланд собирает иконки ?

Haz: Andrey пишет: значит они вероятнее всего не относятся к PE32 ресурсам, Обычный ресурс PE файла , смотрится любым PE Viewer, ResHacker и прочей байдой. Может намекают на то что иконки внешние и подгружаются с диска.


Andrey: Haz пишет: Обычный ресурс PE файла Да вот не могу их убедить что это РЕ. Отправил им тестовый пример...

Andrey: Печально, оказывается иконки в ресурсах всё таки не в PE... Вот их ответ: По скриншоту видно, что загруженные Вами в проект иконки действительно не защищаются и доступны для изменения. Однако если мы посмотрим на Bitmap изображения в ресурсах, мы видим что они как раз защищены, следовательно для защиты иконок Вам требуется загружать иконки в свой проект аналогично ресурсам Bitmap изображений. Как я писал Вам ранее, иконки у Вас в проекте не относятся к PE32 ресурсам, поэтому они и не защищаются. Наверное это из за того что иконка содержится ТОЛЬКО ОДНА в файле: santa_128 ICON res\santa_128.ico santa_96 ICON res\santa_96.ico santa_72 ICON res\santa_72.ico santa_64 ICON res\santa_64.ico А если их сделать несколько в файле, то показа иконки на кнопке не будет. Это наверное все таки ограничение МиниГуи.

Haz: Andrey пишет: требуется загружать иконки в свой проект аналогично ресурсам Bitmap а в чем разница ? в RС они одинаково прописаны. Как вариант можно попробовать скомпилить RES используя компилятор ресурсов от микрософт - RC.EXE

Dima: Andrey пишет: Да я тут в техподдержку бывшего Алладина (http://www.safenet-sentinel.ru/ А какое им дело до твоих EXE , не пойму и зачем им писать ? Что то не стыкуется ?

Haz: Dima пишет: А какое им дело до твоих EXE Думаю Андрей использует их софт для защиты своих программ, но их защита не накрывает ресурсы как надо. Вот алладин и пытается сказать типа мы защищаем только "правильные" ЕХЕ , а твой кривой, вот иди сам и разбирайся Андрей, не парься ты с этой защитой , кому надо - с дампа все выдернут, а вероятность вылета проги с ошибкой увеличивается в разы. PS. как правило все ехе протекторы меняют точку входа в заголовке PE на свою процедуру расшифровки. Андрей, тебе действительно нужен это гемор с ЕХЕ ? в 2000 таких протекторов море было, но .... не прижились. Лучшим распаковщиком тогда UNP.EXE был - легко извлекал чистый ЕХЕ из любой гадости. Как вариант - поменяй компилятор ресурсов на современный , их полно бесплатных начиная от мелкомягкого RC.EXE и заканчивая бесплатным GoRc.exe ( кстати им собираю минигуёвые ресурсы )

Dima: Haz пишет: Андрей использует их софт для защиты своих программ Так и есть , знаю. Haz пишет: но их защита не накрывает ресурсы как надо Теперь понял.

Andrey: Haz пишет: и заканчивая бесплатным GoRc.exe ( кстати им собираю минигуёвые ресурсы ) А как его прикрутить к BCC ? Было бы лучше вообще МиниГуи собирать через MSC и библиотеки лучше (больше распространены) и проблема с размером ресурсов в 500 кб пропадёт.

Haz: Andrey пишет: А как его прикрутить к BCC \ синтаксис сравни, если компилировать батником - легко правится вызов, если через hbmk - то иного способа как поменять в его исходнике и пересобрать - я не нашел Andrey пишет: проблема с размером ресурсов в 500 кб пропадает при любом современном компиляторе ресурсов Вспомнил ))) я даже когдато обманку на харбуре под brcc32 писал ( программу которая принимает синтаксис brcc32 и делает правильный вызов GoRc ... давно это было)

Dima: Haz пишет: Как вариант - поменяй компилятор ресурсов на современный MinGw не покатит (знаю ты сидишь на BCC) ?

Haz: Dima пишет: MinGw скорее всего покатит

Dima: Haz пишет: скорее всего покатит Но надо чекать и скорее всего весь проект тоже надо пересобрать под ним.

Haz: можно собрать RES любым компилятором и сунуть его в папку где его brcc32 формирует при сборке ( можно атрибут ридонли дать ) и линкер его сожрет как более новый. но это неудобно т.к. такой цирк нужно при каждой линьковке делать.

Andrey: Dima пишет: MinGw не покатит (знаю ты сидишь на BCC) ? Под MinGw нет библиотек для Sentinel LDK (это защита приложений для ключей HASP HL. Защита хорошая, проблем с ней нет). Не поддерживает Алладин этот компилятор. Остаётся BCC и MSC. Под BCC мало что поддерживают, уходит в прошлое. Для MSC лучшее кол-во библиотек и поддерживается лучше.

Dima: Andrey пишет: Защита хорошая, проблем с ней нет Читай выше что писал Has PS Чую щас нафлудим в теме ))

Andrey: Всем привет ! Сделал тестовый пример по иконкам. Хочу полностью разобраться с этими иконками ! https://cloud.mail.ru/public/CuPx/ZuLEbXL27 С учётом опыта выяснил следующее: 1) Иконки в МиниГуи собранные BCC в приложении не относятся к PE32 ресурсам. 2) Размер ресурсов собранные BCC 5.5.1 не должен превышать размера 500 кб в одной секции, иначе отказ от сборки приложения. Для увеличения размера ресурсов в приложении нужно создавать новый .rc файл Cмотрите пример, там в Icons_All.rc лишние ресурсы за комментированы. Для увеличения размера можно так же перейти на BCC 5.8.2 или MinGw. 3) Для правильного отображения главной иконки программы - первая иконка должна быть 16х16-256 colors format в файле иконки. 4) Вид приложения собранные BCC в проводнике не поддерживает режим "Огромные значки" (иконки 128х128 не задействуются). 5) Для использования разных размеров иконок в приложении МиниГуи нужно эти иконки размещать отдельным файлом в ресурсах приложения и тогда эту иконку можно выводить на форму или кнопку. Пример файла ресурсы.rc: iSanta128 ICON res\iSanta128.ico iSanta96 ICON res\iSanta96.ico iSanta72 ICON res\iSanta72.ico iSanta64 ICON res\iSanta64.ico iSanta48 ICON res\iSanta48.ico Вывод на форму DRAW ICON IN WINDOW Form_1 AT 20, 20 PICTURE 'iSante128' WIDTH 128 HEIGHT 128 Кстати Григорий так и не дал в библиотеке наглядного примера ! Я понимаю, для многих это очевидные вещи, но для новичков это первые непонятки в МиниГуи (хотя это относится к компилятору BCC 5.5.1, а не к МиниГуи). Остались ещё вопросы по иконкам: 1) Как вывести НУЖНЫЙ ресурс иконки на форму/кнопку из ресурсов своего приложения - файла библиотеки иконок (т.е. когда все размеры иконок в одном файле) ? 2) Как вывести НУЖНЫЙ ресурс иконки на форму/кнопку из файла ресурсов системы: System.SystemFolder + "\shell32.dll" ? Т.е. хочется работать с иконками размера 48х48 или 64х64 - экраны же у всех давно большие ! И ещё просьба к тем, кто работает с MinGw - помогите собрать тестовый пример на MinGw, там ошибка ресурсов какая-то....

Dima: Andrey Для начала в RC у тебя так 1MAIN_ICO ICON res\2MiniGui.ico 1MAIN_ICO2 ICON res\1MiniGui.ico Убери цифру перед MAIN , в BRC возможно это и проходит. ЗЫ Winres же пишет в какой строке непонятка в rc файле.

Andrey: Dima пишет: Убери цифру перед MAIN , в BRC возможно это и проходит. Убрал - ошибка эта ушла. Вылезла другая: hbmk2: Compiling resources... windres.exe: Icons_All_Hmg.rc:18: syntax error hbmk2[Icons_All_MinGw]: Error: Running resource compiler. 1 18 строка: PRODUCTVERSION 1,0 Я так понял, что у MinGw свой синтаксис ресурсного файла. Дайте пожалуйста у кого есть - как правильно перечислить все там VALUE "FileDescription", .... VALUE "FileVersion" , .... VALUE "InternalName" , ... VALUE "LegalCopyright" , ... VALUE "LegalTrademarks", ... и т.д.

Dima: Andrey Погугли http://pvbookmarks.readthedocs.org/en/master/devel/IDEs/GNU_minGW/windres/windres.html Возможно скобки ({}) там не нужны

ММК: Andrey пишет: Остаётся BCC и MSC. Под BCC мало что поддерживают, уходит в прошлое. Ну не так уж чтоб совсем ...:( Есть ВСС7.1 и ВСС7.1-64 Посмотри ResHacker . Он создает RC и DLL. Использую с FWH , работает хорошо. Синтаксис вроде похож на MiniGu , может поможет ...

Haz: ММК пишет: Ну не так уж чтоб совсем ...:( Есть ВСС7.1 Есть подозрение что в BCC7 х 32 компилятор ресурсов BRCC остался от версии 5 Во всяком случае в той сборке что я видел - BCC7.0 компилер BRCC32 был от 5.40.

ММК: Haz пишет: Во всяком случае в той сборке что я видел - BCC7.0 компилер BRCC32 был от 5.40. Ну , что сказать :) По размеру и датам они разные, а содержимое... ??? Да и под 64 разряда наверняка переделывали. Это я о 7.1

Andrey: ММК пишет: Посмотри ResHacker . Он создает RC и DLL. Использую с FWH , работает хорошо. Синтаксис вроде похож на MiniGu , может поможет А какой версией пользуешься ? Как в FWH можно вывести иконку нужного размера (из одного файла библиотеки иконки из ресурсов в ехе-нике) на форму и кнопку ? Приведи пожалуйста синтаксис, если можно то лучше небольшой пример. В МиниГуи этого сделать не могу.

ММК: Andrey пишет: А какой версией пользуешься ? Как в FWH можно вывести иконку нужного размера (из одного файла библиотеки иконки из ресурсов в ехе-нике) на форму и кнопку ? Приведи пожалуйста синтаксис, если можно то лучше небольшой пример. В МиниГуи этого сделать не могу. Версия не имеет особого значения, как и пр-ма. Это может быть WorkShop к примеру.. Вы попробуйте сделать RC любой из таких пр-м и посмотрите. Уж синтаксит там стаандарту будет соответствовать. Во всяком случае в FWH это работает и с ВСС и с MSVC 2015 В FWH можно использовать картинки разного формата, но мне больше нравятся BMP. С размером проблем нет. Иконки очень редко, например так : В пр-ме. ...... Local oBrush,oFon1,oFon2,oFon3,oIcon DEFINE ICON oIcon NAME "ICON_1" DEFINE WINDOW oWnd TITLE 'СООО "Ингман мороженое" v 13.0' ; FROM 1, 1 TO 40, 135 ; ICON oIcon ; MENU BuildMenu() ...... В RC #include "..\include\winapi.ch" ICON_1 ICON "Aun.ico" ON BITMAP "..\bitmaps\checkon.bmp" OFF BITMAP "..\bitmaps\checkoff.bmp" Для DLL в пр-ме SET RESOURCES TO "MAK.DLL" // MAK.DLL здесь держу всякую всячину Вариантов использования много. Например заставка для окна так- hBmp = LoadBitmap( GetResources(), "M416" ) ACTIVATE WINDOW oWnd MAXIMIZED; ON PAINT (GradientFill( hDC,0,0, oWnd:nHeight, oWnd:nWidth, aGrad,.F. ) ,IF( hBmp != 0, DRAWMASKED( hDC,hBmp,75,95),) )//; // ON INIT (ownd:Center()) ; Для TsBrows b TsBUTTON (это разработка одного человека ) так - DEFINE SBUTTON GROUP OF oBa ADJUST; RESOURCE "B2", "B2",, "B2" ; TOOLTIP "Сделать копию " ; Action (NorCop(),oBrw:Refresh(),oBrw:SetFocus()); LOOK W97 //; где "B2", "B2",, "B2" имена BMP в DLL И т.д.

ММК: Вот пример , где иконка используется для анимации ( иконка в ДЛЛ ) // Animations using Icons and Timers #include "FiveWin.ch" static oWnd //----------------------------------------------------------------------------// function Main() local oBrush #ifdef __CLIPPER__ SET RESOURCES TO "Animat16.dll" #else SET RESOURCES TO "Animat32.dll" #endif DEFINE BRUSH oBrush STYLE TILED DEFINE WINDOW oWnd FROM 1, 1 TO 20, 60 ; TITLE "Icons & Timers" BRUSH oBrush SET MESSAGE OF oWnd ; TO FWVERSION + FWCOPYRIGHT ACTIVATE WINDOW oWnd ; ON INIT DisplayIcons() return nil //----------------------------------------------------------------------------// function DisplayIcons() local oIco, oTimer static nFrame := 1 @ 2, 2 ICON oIco RESOURCE "ICON1" OF oWnd BORDER DEFINE TIMER oTimer OF oWnd ; INTERVAL 400 ; ACTION ( nFrame := If( ++nFrame > 20, 1, nFrame ) , ; oIco:SetName( "ICON" + AllTrim( Str( int(nFrame) ) ) ) ) ACTIVATE TIMER oTimer return nil

Andrey: ММК пишет: Вот пример , где иконка используется для анимации ( иконка в ДЛЛ ) Если не сложно - выложи пожалуйста рабочий ехе-ник этого примера вместе с dll-кой ! Заранее спасибо !

ММК: Andrey пишет: Если не сложно - выложи пожалуйста рабочий ехе-ник этого примера вместе с dll-кой ! Заранее спасибо ! Ну и куда? :) Давайте адресок- на почту кину...

Dima: ММК пишет: Ну и куда? :) У него в профиле мыло живет :)

ММК: Dima пишет: У него в профиле мыло живет :) Все сделал , как ты сказал :)

Andrey: ММК пишет: Давайте адресок- на почту кину... Давай уже на ты ! Спасибо большое ! Посмотрел. А там только иконка 32х32. А другие размеры иконок в FW есть: 48х48, 64х64, 96х96 ? В миниГуи есть ! Вот пример - https://cloud.mail.ru/public/3mNs/eVp4CfLFE

Haz: Andrey пишет: В миниГуи есть ! Э... "простите мне мой французский" (с) ... Мне кажется, что данный поворот вопроса - в никуда Какая разница мини или файв - это всего лишь надстройка , позволяющая КОМПИЛЯТОРУ BCC сформировать объектный PCODE для КОМПАНОВЩИКА ILINK. Ресурсы из RC скрипта компилируются тем же BRCC и передаются в виде RES файла туда же в ILINK. Меряться иконками в двух языках, которые в итоге собираются одним и тем же борландом, это все равно что сравнивать чей светофор зеленее. Имеет смысл либо сравнивать разные компиляторы BCC, MINGW, MSVC и пр. или как минимум разные разрядности одного компилятора 32 и 64. все вышесказанное - ИМХО , но кто сможет опровергнуть - с удовольствием все почитаем

Andrey: Haz пишет: Меряться иконками в двух языках, которые в итоге собираются одним и тем же борландом, это все равно что сравнивать чей светофор зеленее. Да я не мерюсь. Просто беда с отображением картинок на форме. В других языках добавил один файл иконок с разными расширениями и тягаешь на форму нужный тебе размер иконок. А в МиниГуи пытаешься сделать красивый вид окна и начинаешь экспериментировать - изобретать велосипед как в других языках. PNG-файл с окантовкой черной вылазит и сменить фон у него проблематично.... Вся жизнь в борьбе за красоту интерфейса ... Вот очередной тест что может пригодиться для интерфейса: кнопочки, иконки .... https://cloud.mail.ru/public/4F2B/wvGXVyp3z На иконке остановился из за того что на любой цвет можно положить на форму и не будет черной окантовки вокруг иконки. На кнопку можно положить (я так понял) ICO и BMP. С иконкой выходит красиво, с BMP уё ! Может что не так делаю ? Если можно что-то добавить, то буду очень рад.

SergKis: Andrey пишет:В других языках добавил один файл иконок с разными расширениями и тягаешь на форму ... Кто мешает тебе изучить DEFINE IMAGELIST ... и функции IL_..., есть примеры на применение, смену фона ...

Andrey: SergKis пишет: Кто мешает тебе изучить DEFINE IMAGELIST ... и функции IL_..., есть примеры на применение, смену фона ... А я не знал... Буду смотреть. Спасибо за наводку ! Вспомнил. Оказывается раньше смотрел, перед тем как уйти на PNG. Не понравился мне принцип хранения картинок - неудобен.

Haz: Andrey пишет: 2) Размер ресурсов собранные BCC 5.5.1 не должен превышать размера 500 мб в одной секции, иначе отказ от сборки приложения. а чего так мало то ?

ММК: Haz пишет: превышать размера 500 мб в одной секции, иначе отказ от сборки приложения. а чего так мало то ? Родненькие мои! Да что это за пр-мы вы пишите?! Да в 500 мб можно целый порносайт вместить!

Haz: ММК это не я написал , про полгига, исправь . Мне просто стало интересно откуда эта цифиря

ММК: Извини пожалуйста! Про 500 мб написал Андрей. А ты сказал , что тебе и этого мало!!! :)))

Haz: ММК пишет: Извини пожалуйста! Про 500 мб написал Андрей. А ты сказал , что тебе и этого мало!!! :))) Ерунда, сам сто раз так ошибался ) Посмотрел что выяснил Андрей в том посте и на основе его выяснений , выяснил другие 1) BCC собирает ресурсы в PE32 2) Легко глотает иконы размером 256 ( больше не проверял т.к. лень их было искать ) 3) насчет 500 мб не осилил, но ресурс в 650 кб легко компануется в EXE Единственное - так это использовал не борландовский компилер ресурсов при сборке Что еще не выяснил как из такого ресурса дергать икону по номеру т.к. пока нет надобности В ресхакере видно группы икон и их состав [pre2] 256 × 256 (16.8mil colors) - Ordinal name: 1 128 × 128 (16.8mil colors) - Ordinal name: 2 96 × 96 (16.8mil colors) - Ordinal name: 3 72 × 72 (16.8mil colors) - Ordinal name: 4 64 × 64 (16.8mil colors) - Ordinal name: 5 48 × 48 (16.8mil colors) - Ordinal name: 6 32 × 32 (16.8mil colors) - Ordinal name: 7 24 × 24 (16.8mil colors) - Ordinal name: 8 16 × 16 (16.8mil colors) - Ordinal name: 9 [/pre2]

ММК: Haz пишет: Что еще не выяснил как из такого ресурса дергать икону по номеру т.к. пока нет надобности А вон чуток выше пример выложил. Там 20 иконок выводятся последовательно для создания видимости анимации

Haz: ММК пишет: А вон чуток выше пример выложил. Видел . В минигуи нет DEFINE ICON oIcon NAME "ICON_1" чтоб потом указать DEFINE WINDOW oWnd TITLE 'СООО "Ингман мороженое" v 13.0' ; ICON oIcon ; Уверен что прикрутить можно через winapi . но пока без надобности

gfilatov2002: Haz пишет: как из такого ресурса дергать икону по номеру Андрей скинул мне следующую ссылку, где доходчиво объсняется, как это сделать нажать Требуется сишник для переноса этого кода в среду Харбора

ММК: Haz пишет: В минигуи нет DEFINE ICON oIcon NAME "ICON_1" чтоб потом указать Не ,это с RC. Имел в виду следующий пост - с DLL. .. function DisplayIcons() local oIco, oTimer static nFrame := 1 @ 2, 2 ICON oIco RESOURCE "ICON1" OF oWnd BORDER DEFINE TIMER oTimer OF oWnd ; INTERVAL 400 ; ACTION ( nFrame := If( ++nFrame > 20, 1, nFrame ) , ; oIco:SetName( "ICON" + AllTrim( Str( int(nFrame) ) ) ) ) ACTIVATE TIMER oTimer return nil

Haz: gfilatov2002 пишет: Требуется сишник для переноса этого кода в среду Харбора тут я мимо ((( Думаю в исходниках FW это есть уже под харбур ...

Andrey: gfilatov2002 Глянь пожалуйста - Haz пишет: Думаю в исходниках FW это есть уже под харбур ... Может оттуда можно взять ?

gfilatov2002: Andrey пишет: Глянь пожалуйста Уже проверил - нет там ничего подобного...

Andrey: Попросил написать знакомого на C# тестовую программу. Вот результат - https://cloud.mail.ru/public/Bm9t/HDVBfGdMY На МиниГуи вот такая программа - https://cloud.mail.ru/public/4F2B/wvGXVyp3z Вывод один, можно отказаться от иконок если будет нормальная обработка PNG файла: на форму и на кнопки !

ММК: Andrey пишет: Вывод один, можно отказаться от иконок если будет нормальная обработка PNG файла: на форму и на кнопки ! Можно отказаться и от PNG если будет нормальная работа с BMP. Посмотри BMP альфа, режим TRANSPARENT Что касается PNG, ICO то конечно в FWH это есть и для клиппера и для харбора, но разбираться ... :( Овчинка выделки не стоит. Для решения всех твоих проблем вполне хватит BMP :)

Andrey: ММК пишет: Можно отказаться и от PNG если будет нормальная работа с BMP. Посмотри BMP альфа, режим TRANSPARENT А поподробней можно ? Т.е. каким редактором нужно править BMP, как сохранить его. И где этот альфа-центавра находиться ?

Dima: Andrey пишет: Т.е. каким редактором нужно править BMP, как сохранить его Погугли Я для этого юзал Axialis IconWorkshop , но можно и фотошоп конечно. PS Например http://www.ikonki.ru/notes/?id=0002



полная версия страницы