Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.07.2010, 08:22
Romix Romix вне форума
Начинающий
 
Регистрация: 10.02.2008
Сообщения: 136
Версия Delphi: XE2
Репутация: 41
Восклицание Замена ресурсов...

Помогите... Всю ночь пытался!!! Нужно каким то образом прочитать ресурс из exe файла в переменные, а потом этот же ресурс записать в этот же exe файл только под другим именем... Что только не пробывал... Ничего не получается!!! Вот к чему я пришел, но ничего не работает...
Код:
var
LoadLib: THandle;
Sl: TStringList;
LockRes: Array of PChar;
SizeOfRes: Array of DWord;
function StockResourceType(ResType: PChar): string;
begin
if ResType = PChar(14) then
Result:='RT_GROUP_ICON';
end;

function EnumResNamesProc(Module: HMODULE; ResType, ResName: PChar; Ts: TStrings): Integer; stdcall;
begin
if (StockResourcetype(ResType) = 'RT_GROUP_ICON') then
begin
if HiWord(Cardinal(ResName)) <> 0 then
Ts.Add(ResName)
else
Ts.Add(Format('%d', [LoWord(Cardinal(ResName))]));
end;
Result:=1;
end;

function EnumResTypesProc(Module: HMODULE; ResType: PChar; Ts: TStrings): Integer; stdcall;
begin
if (StockResourcetype(ResType) = 'RT_GROUP_ICON') then
begin
EnumResourceNames(Module, ResType, @EnumResNamesProc, Integer(Ts));
end;
Result:=1;
end;

procedure CopyRes;
var
FindRes, LoadRes: HRSRC;
I: Integer;
begin
LoadLib:=LoadLibrary(PChar('c:\calc.exe'));

Sl:=TStringList.Create;
EnumResourceTypes(LoadLib, @EnumResTypesProc, Integer(Sl));

SetLength(SizeOfRes, Sl.Count);
SetLength(LockRes, Sl.Count);

for I:=0 to Sl.Count - 1 do
begin
FindRes:=FindResource(LoadLib, MakeIntResource(PChar(Sl.Strings[i])), RT_GROUP_ICON);
if FindRes = 0 then
FindRes:=FindResource(LoadLib, MakeIntResource(StrToInt(Sl.Strings[i])), RT_GROUP_ICON);

LoadRes:=LoadResource(LoadLib, FindRes);

LockRes[i]:=LockResource(LoadRes);

SizeOfRes[i]:=SizeOfResource(LoadLib, FindRes);
end;
FreeLibrary(LoadLib);
end;

procedure PasteRes;
var
I: Integer;
BeginUpdateRes: THandle;
begin
LoadLib:=LoadLibrary(PChar('c:\calc.exe'));
for I:=0 to Sl.Count - 1 do
begin
BeginUpdateRes:=BeginUpdateResource(PChar('c:\calc.exe'), False);

UpdateResource(BeginUpdateRes, RT_GROUP_ICON, MakeIntResource(PChar('Новое имя')),
LangId(nil), LockRes[i], SizeOfRes[i]);

EndUpdateResource(BeginUpdateRes, False);
end;
FreeLibrary(LoadLib);
end;

Нужно что бы можно было работать с этим файлом в промежутке между двумя процедурами!!! Например его править или вообще удалить... Просто иначе к нему нету доступа... Теоретически данный код должен работать... Но че то никак... Заранее большое ПАСИБ...

Последний раз редактировалось Romix, 31.07.2010 в 09:17.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:03.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter