1. 程式人生 > >學習使用資原始檔[10] - 嵌入和提取任何型別的檔案 學習使用資原始檔[10] - 嵌入和提取任何型別的檔案

學習使用資原始檔[10] - 嵌入和提取任何型別的檔案 學習使用資原始檔[10] - 嵌入和提取任何型別的檔案

學習使用資原始檔[10] - 嵌入和提取任何型別的檔案

//下面是 Windows 支援的資源格式:
RT_CURSOR       = MakeIntResource(1);
RT_BITMAP       = MakeIntResource(2);
RT_ICON         = MakeIntResource(3);
RT_MENU         = MakeIntResource(4);
RT_DIALOG       = MakeIntResource(5
); RT_STRING      = MakeIntResource(6); RT_FONTDIR      = MakeIntResource(7); RT_FONT        = MakeIntResource(8); RT_ACCELERATOR  = MakeIntResource(9); RT_RCDATA      = Types.RT_RCDATA; //MakeIntResource(10); RT_MESSAGETABLE = MakeIntResource(11
);   DIFFERENCE  = 11; RT_GROUP_CURSOR = MakeIntResource(DWORD(RT_CURSOR + DIFFERENCE)); RT_GROUP_ICON  = MakeIntResource(DWORD(RT_ICON + DIFFERENCE)); RT_VERSION      = MakeIntResource(16); RT_DLGINCLUDE  = MakeIntResource(17); RT_PLUGPLAY    = MakeIntResource(19
); RT_VXD          = MakeIntResource(20); RT_ANICURSOR    = MakeIntResource(21); RT_ANIICON      = MakeIntResource(22);

//儘管 Windows 規定 RCDATA 用作自定義格式, 我們也可以自定義格式名稱, 譬如本例(rc 檔案):
MyFile1 RCDATA "c:\Windows\system32\notepad.exe"
MyFile2 MyRes "c:\Windows\System32\calc.exe"

{上面把 notepad.exe 時指定為 RCDATA 格式; 把 calc.exe 就指定成了自定義的 MyRes 格式}

//本例在資源中嵌入了記事本和計算器, 然後提取並呼叫:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  rs: TResourceStream;
begin
  rs := TResourceStream.Create(HInstance, 'MyFile1', RT_RCDATA);
  rs.SaveToFile('c:\temp\pad.exe');
  WinExec('c:\temp\pad.exe', 1);
  rs.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  rs: TResourceStream;
begin
  rs := TResourceStream.Create(HInstance, 'MyFile2', 'MyRes');
  rs.SaveToFile('c:\temp\sum.exe');
  WinExec('c:\temp\sum.exe', 1);
  rs.Free;
end;

end.

 

//下面是 Windows 支援的資源格式:
RT_CURSOR       = MakeIntResource(1);
RT_BITMAP       = MakeIntResource(2);
RT_ICON         = MakeIntResource(3);
RT_MENU         = MakeIntResource(4);
RT_DIALOG       = MakeIntResource(5);
RT_STRING       = MakeIntResource(6);
RT_FONTDIR      = MakeIntResource(7);
RT_FONT         = MakeIntResource(8);
RT_ACCELERATOR  = MakeIntResource(9);
RT_RCDATA       = Types.RT_RCDATA; //MakeIntResource(10);
RT_MESSAGETABLE = MakeIntResource(11);
   DIFFERENCE   = 11;
RT_GROUP_CURSOR = MakeIntResource(DWORD(RT_CURSOR + DIFFERENCE));
RT_GROUP_ICON   = MakeIntResource(DWORD(RT_ICON + DIFFERENCE));
RT_VERSION      = MakeIntResource(16);
RT_DLGINCLUDE   = MakeIntResource(17);
RT_PLUGPLAY     = MakeIntResource(19);
RT_VXD          = MakeIntResource(20);
RT_ANICURSOR    = MakeIntResource(21);
RT_ANIICON      = MakeIntResource(22);

//儘管 Windows 規定 RCDATA 用作自定義格式, 我們也可以自定義格式名稱, 譬如本例(rc 檔案):
MyFile1 RCDATA "c:\Windows\system32\notepad.exe"
MyFile2 MyRes "c:\Windows\System32\calc.exe"

{上面把 notepad.exe 時指定為 RCDATA 格式; 把 calc.exe 就指定成了自定義的 MyRes 格式}

//本例在資源中嵌入了記事本和計算器, 然後提取並呼叫:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  rs: TResourceStream;
begin
  rs := TResourceStream.Create(HInstance, 'MyFile1', RT_RCDATA);
  rs.SaveToFile('c:\temp\pad.exe');
  WinExec('c:\temp\pad.exe', 1);
  rs.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  rs: TResourceStream;
begin
  rs := TResourceStream.Create(HInstance, 'MyFile2', 'MyRes');
  rs.SaveToFile('c:\temp\sum.exe');
  WinExec('c:\temp\sum.exe', 1);
  rs.Free;
end;

end.