Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Модуль работы с ресурсами в PE файлах 
:(
    Опции темы
Alex
Дата 21.10.2004, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Для общего пользования выкладывается модуль работы с ресурсами в PE файлах, который корректно работает во всех версиях Windows. За основу был взят модуль работы с ресурсами компании Mathias Rauen, www.madshi.net.

Возможности:
1. Извлечение иконок из ресурсов без потери их цветовой гаммы и с сохранением всех вложенных иконок.
2. Добавление нового ресурса
3. Изменение существующего ресурса
4. Удаление ресурса
5. Работа с ресурсами различных языков
и т. д.

Работа над модулем будет продолжена. Свежую версию, вы всегда можете скачать по адресу http://alex-co.com.ru/delphi/modules/acWorkRes.rar

Примеры:
1. Подмена Bitmap ресурса с явным заданием языка ресурса:
Код
var
  hUpdateRes: THandle;
begin
  hUpdateRes:= BeginUpdateResourceW('Путь к файлу', FALSE);
  if not LoadBitmapResourceW(hUpdateRes, 'Имя ресурса', 1049,'e:\Temp\123.bmp') then
    showMessage('');
  EndUpdateResourceW(hUpdateRes, FALSE);

2. Подмена Bitmap ресурса без явного задания языка ресурса:
Код
var
  hUpdateRes: THandle;
begin
  hUpdateRes:= BeginUpdateResourceW('Путь к файлу', FALSE);
  notLang:= True;
  try
    if not LoadBitmapResourceW(hUpdateRes, 'Имя ресурса', 0,'e:\Temp\123.bmp') then
    showMessage('');
  finally
    notLang:= False;
  end;
  EndUpdateResourceW(hUpdateRes, FALSE);

3. Переименование производителя программы:
Код
uses
  acWorkRes;
...

threadvar
  ResName : PChar; // эта переменная нужна!

procedure ChangeCompany (FileName : string; NewCompany : string);
const
  StringFileInfo = 'StringFileInfo';
  CompanyName = 'CompanyName';

var
  hUpdate : THandle;
  hExe : HMODULE;
  Data : WideString;
  ResInfo : HRSRC;
  ResData : HGLOBAL;
  Adr : Pointer;
  Size : DWORD;
  i0, i00, i, l, delta : integer;
  NewCompanyZ : string;

  function EnumFunc (hMod : HMODULE; lpszType : LPCTSTR; lpszName : LPTSTR; lParam : integer) : BOOL; stdcall;
  begin
   ResName := lpszName;
   Result := False;
  end;

begin
  hExe := LoadLibrary (PChar(FileName));
  if hExe = 0 then Exit;
  ResName := nil;
  EnumResourceNames (hExe, RT_VERSION, @EnumFunc, 0);

  ResInfo := FindResource (hExe, ResName, RT_VERSION);
  if ResInfo = 0 then Exit;
  ResData := LoadResource (hExe, ResInfo);
  Adr := LockResource (ResData);
  Size := SizeofResource (hExe, ResInfo);
  SetLength(Data, Size div 2);
  CopyMemory (@Data[1], Adr, Size);
  FreeResource (ResData);
  FreeLibrary (hExe);

  NewCompanyZ := NewCompany + #0;
  while (Length(NewCompanyZ) mod 2) <> 0 do NewCompanyZ := NewCompanyZ + #0;

  i00 := Pos(StringFileInfo, Data);
  if i00 = 0 then Exit;

  i0 := PosEx(CompanyName, Data, i00);
  if i0 = 0 then Exit;

  i := i0 + Length(CompanyName);
  while Data[i] = #0 do Inc(i);
  l := 0;
  while Data[i+l] <> #0 do Inc(l);
  while Data[i+l] = #0 do Inc(l);
  Delete (Data, i, l);
  Insert (NewCompanyZ, Data, i);

  delta := (Length(NewCompanyZ) - l);
  Data[i0-3] := WideChar( Word(Data[i0-3]) + delta*2 ); // размер CompanyName
  Data[i0-2] := WideChar(Length(NewCompany)+1); // длина нового производителя
  Data[i00-3] := WideChar( Word(Data[i00-3]) + delta*2 ); // размер StringFileInfo

  Size := Length(Data)*2;
  Data[1] := WideChar(Size);

  hUpdate := BeginUpdateResourceW(StringToPWide(FileName), False);
  notLang:= True;
  try
    UpdateResourceW(hUpdate, PWideChar(RT_VERSION), PWideChar(ResName), 0, @Data[1], Size);
  finally
    notLang:= False;
  end;
  EndUpdateResourceW(hUpdate, False);
end;



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0613 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.