Вниз
Скачать: CL | DM;

Как извлекать ресурсы RT_RCDATA из файлов   Найти похожие ветки 

 
Игорь Шевченко ©   (2004-02-19 13:13) [0]

Поскольку вопрос KosilkA был справедливо удален за несоответствие правилам оформления вопросов, напишу ответ отдельным постом.

unit main;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 Menus, StdCtrls;

type
 TfMain = class(TForm)
   OpenDialog: TOpenDialog;
   MainMenu: TMainMenu;
   File1: TMenuItem;
   Open1: TMenuItem;
   N1: TMenuItem;
   Exit1: TMenuItem;
   ListBox: TListBox;
   btnExtract: TButton;
   procedure Exit1Click(Sender: TObject);
   procedure Open1Click(Sender: TObject);
   procedure btnExtractClick(Sender: TObject);
 private
   FFileName : string;
   procedure EnumRCData;
   procedure ExtractResource (const ExeName, ResName : string);
 end;

var
 fMain: TfMain;

implementation

{$R *.DFM}

function EnumResNames (HMod : HMODULE; const ResType, ResName : PChar;
 Param : LPARAM) : LongBool; stdcall;
begin
 with TfMain(Param) do
   ListBox.Items.Add(ResName);
 Result := true;
end;

procedure TfMain.EnumRCData;
var
 HMod : HMODULE;
begin
 ListBox.Items.Clear;
 HMod := LoadLibraryEx(PChar(FFileName), 0, LOAD_LIBRARY_AS_DATAFILE);
 if HMod <> 0 then
   try
     EnumResourceNames(HMod, RT_RCDATA, @EnumResNames, LPARAM(Self));
   finally
     FreeLibrary(HMod);
   end;
 btnExtract.Enabled := ListBox.Items.Count <> 0;
 if ListBox.Items.Count <> 0 then begin
   ListBox.ItemIndex := 0;
   ListBox.SetFocus;
 end;
end;

procedure TfMain.Exit1Click(Sender: TObject);
begin
 Close;
end;

procedure TfMain.ExtractResource(const ExeName, ResName: string);
var
 HMod : HMODULE;
 HFindRes : HRSRC;
 HRes : HGLOBAL;
 ResSize : Cardinal;
 ResData : Pointer;
 FileH : Integer;
begin
 HMod := LoadLibraryEx(PChar(FFileName), 0, LOAD_LIBRARY_AS_DATAFILE);
 if HMod <> 0 then
   try
     HFindRes := FindResource(HMod, PChar(ResName), RT_RCDATA);
     if HFindRes <> 0 then begin
       ResSize := SizeOfResource(HMod, HFindRes);
       HRes := LoadResource(HMod, HFindRes);
       if HRes <> 0 then begin
         ResData := LockResource(HRes);
         FileH := FileCreate (ChangeFileExt(ResName, ".DAT"));
         if FileH <> -1 then begin
           FileWrite (FileH, ResData^, ResSize);
           FileClose (FileH);
         end;
       end;
     end;
   finally
     FreeLibrary(HMod);
   end;
end;

procedure TfMain.Open1Click(Sender: TObject);
begin
 if OpenDialog.Execute then begin
   FFileName := OpenDialog.FileName;
   EnumRCData;
 end;
end;

procedure TfMain.btnExtractClick(Sender: TObject);
begin
 ExtractResource(FFileName, ListBox.Items[ListBox.ItemIndex]);
end;

end.


Метод ExtractResource как раз делает, что должен быть делать по замыслу KosilkA

Нетрудно расширить область область применения на другие типы ресуров :)))


 
KosilkA ©   (2004-02-19 13:25) [1]


> Игорь Шевченко ©   (19.02.04 13:13)  

огромное спасибо!



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.021 c
9-1068037261
Delpher_Gray
2003-11-05 16:01
2004.04.25
Изображения большого размера в PowerDraw !?!


3-1080460711
Dimagenius
2004-03-28 11:58
2004.04.25
Как осуществить поиск в таблице базы данных?


3-1079610486
Володя
2004-03-18 14:48
2004.04.25
Использование БД FoxPro в Delphi


6-1077882441
ALeX.B.
2004-02-27 14:47
2004.04.25
Как ускорить работу ICMP из ICS(KOL)?


3-1080796265
DrAculenok
2004-04-01 09:11
2004.04.25
Не могу заInsertить данные:




   Наверх