Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2014, 20:01   #1
STRELOK-2007
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 144
Вопрос Сменить иконку у стороннего приложения

Приветствую!

Нужно научиться менять ресурсы у стороннего приложения. Сперва иконку, потом и версию.

Никак не могу разобраться в трех соснах, это BeginUpdateResource, UpdateResource и EndUpdateResource.

Вызываю примерно так.

Код:
var
 msIcon: TMemoryStream;
 hExe: THandle;

 x: TResourceStream;
begin
 msIcon:=TMemoryStream.Create;
 msIcon.LoadFromFile(fdir+'icon.ico');
 msIcon.Seek(0, soFromBeginning);

 hExe:=BeginUpdateResourceW(PWideChar(newfn), False);

 ShowMessage(BoolToStr(UpdateResourceW(hExe, RT_ICON, 'MAINICON', MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), msIcon.Memory, msIcon.Size), True));

 ShowMessage(BoolToStr(EndUpdateResourceW(hExe, False), True));
end;
Тут "играюсь" с параметрами типа, имени и языка ресурса. В данном случае, последний вариант.

UpdateResourceW - возвращает True
EndUpdateResourceW - возвращает False

при любых (какие я испробовал) вариантах.

В чем может быть дело?

Как это правильно делается?

P.S.
Очень желательно, без каких либо сторонних библиотек, только на WinAPI.
STRELOK-2007 вне форума Ответить с цитированием
Старый 16.02.2014, 20:38   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

GetLastError смотрели?
И внизу в похожих темах первая
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.02.2014, 21:00   #3
STRELOK-2007
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 144
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
GetLastError смотрели?
И внизу в похожих темах первая
Смотрел. Не работает код. Иконка бьется.
STRELOK-2007 вне форума Ответить с цитированием
Старый 16.02.2014, 21:42   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Смотрел.
Врёте. Что писало?
Человек_Борща вне форума Ответить с цитированием
Старый 17.02.2014, 00:04   #5
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Цитата:
Сообщение от STRELOK-2007 Посмотреть сообщение
Нужно научиться менять ресурсы у стороннего приложения.
Аля Restorator? Баян. Не вижу смысла делать то, что уже сделали до нас.
doktor255 вне форума Ответить с цитированием
Старый 17.02.2014, 00:22   #6
STRELOK-2007
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 144
Восклицание

Цитата:
Сообщение от doktor255 Посмотреть сообщение
Аля Restorator? Баян. Не вижу смысла делать то, что уже сделали до нас.
Проект абсолютно из другой области. Задался целью написать программный комплекс по созданию инсталляторов. В первую очередь, для развертывания своих продуктов.
Да, есть куча бесплатных и платных, но все не подходят - либо сложные, либо черезчур "нафундыченные".
Пользуюсь с 2008 года Smart Install Maker, просто и удобно. Но есть то, что сделано неудачно, есть то - чего не хватает.

Так вот, собственно хочу сделать компиллятор. Для этого нужно взять "болванку" и нарезать на нее информацию. Собственно это ресурс иконки, ресурс версии, метка-маркер, заголовок, информация об установщике(действия, список файлов) и сами файлы.
Все кроме ресурсов - никакой проблемы не составляет, абсолютно.

И все таки, как реализовать задуманное?

1) какой тип ресурса должен быть? RT_ICON или RT_GROUP_ICON?
2) Какое имя? MAINICON?
3) Какой язык? 1033?
4) Вообще, нужно ли как-то обработать icon файл до помещения в ресурсы?
STRELOK-2007 вне форума Ответить с цитированием
Старый 17.02.2014, 00:56   #7
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Код:
uses acWorkRes;
...
procedure TForm1.Button1Click(Sender: TObject);
 var q: dword;
begin
  q:= BeginUpdateResourceS('D:/project1.exe', False);
  if q <> 0 then begin
    if not ReplaceIconGroupResourceS(q, 'MAINICON', 0, 'D:/100.ico') then caption:= ('Иконка не установлена!!!');
    EndUpdateResource(q, False);
  end;
end;
P.S. потратил около 2х минут на поиск в гугле...
Вложения
Тип файла: rar acWorkRes.rar (9.1 Кб, 22 просмотров)
doktor255 вне форума Ответить с цитированием
Старый 17.02.2014, 07:57   #8
STRELOK-2007
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 144
По умолчанию

Цитата:
Сообщение от doktor255 Посмотреть сообщение
Код:
uses acWorkRes;
...
procedure TForm1.Button1Click(Sender: TObject);
 var q: dword;
begin
  q:= BeginUpdateResourceS('D:/project1.exe', False);
  if q <> 0 then begin
    if not ReplaceIconGroupResourceS(q, 'MAINICON', 0, 'D:/100.ico') then caption:= ('Иконка не установлена!!!');
    EndUpdateResource(q, False);
  end;
end;
P.S. потратил около 2х минут на поиск в гугле...
Без сторонних модулей и API. Этот вариант я тоже видел, но не подходит. Есть еще модуль от mad, есть еще какой-то.
STRELOK-2007 вне форума Ответить с цитированием
Старый 17.02.2014, 09:12   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Без сторонних модулей и API.
Без Win API? О_о А как же: BeginUpdateResourceW ?
Ты кроссплатформенку пишешь? Тогда тебе нужно использовать TResourceStream.
Честно не вспомню где, кажись в Королевстве Делфи был пример с этим классом для редактирования ресурсов другого файла.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.02.2014, 09:21   #10
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Цитата:
Сообщение от STRELOK-2007 Посмотреть сообщение
Без сторонних модулей
Религия что-ли не позволяет?Тогда уж без сторонних модулей, и без сторонней помощи.
doktor255 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как программно сменить иконку в трее компонента TtrayIcon ? zmxncb Компоненты Delphi 3 15.12.2014 03:26
Как сменить иконку у любого файла ЕХЕ cargo29 Общие вопросы Delphi 25 05.06.2011 23:46
значение из стороннего приложения Wov Общие вопросы Delphi 4 01.03.2011 00:04
Сменить иконку? zhook Общие вопросы Delphi 3 28.12.2010 00:57
Защита стороннего приложения Mifody Общие вопросы Delphi 1 25.03.2010 13:19