Форум: "WinAPI";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизКак извлекать ресурсы 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.038 c