Привет, Андрей!

1. Start notepad and create a .rc-file that looks like this: 
Starte Notepad und erstelle ein .rc-file, das etwa so aussieht: 



TESTFILE EXEFILE C:\Windows\Notepad.exe 
 



(Make sure that the Path to your Exe-File is correct!) 
(Stelle sicher, dass der Pfad zur Exe-Datei korrekt ist!) 

2. Save it as myres.rc 
Speichere es als myres.rc 

3. Compile the file with brcc32.exe 
(in your Delphi-bin directory) to get myres.res 
Kompiliere die Datei mit brcc32.exe 
(Im Delphi-bin Verzeichnis) um die Datei myres.res zu erhalten. 

4. Copy myres.res to your Project directory. 
Kopiere myres.res in das entsprechende Projekt-Verzeichnis. 

5. In your unit write the following: 
In der unit, schreibe etwa das folgende: 



var 
  Form1: TForm1; 
  NOTEPAD_FILE: string; 

implementation 

{$R *.DFM} 
{$R MYRES.RES} 

function GetTempDir: string; 
var 
  Buffer: array[0..MAX_PATH] of Char; 
begin 
  GetTempPath(SizeOf(Buffer) - 1, Buffer); 
  Result := StrPas(Buffer); 
end; 

// Extract the Resource 
function ExtractRes(ResType, ResName, ResNewName: string): Boolean; 
var 
  Res: TResourceStream; 
begin 
  Result := False; 
  Res := TResourceStream.Create(Hinstance, Resname, PChar(ResType)); 
  try 
    Res.SavetoFile(ResNewName); 
    Result := True; 
  finally 
    Res.Free; 
  end; 
end; 

// Execute the file 
procedure ShellExecute_AndWait(FileName: string); 
var 
  exInfo: TShellExecuteInfo; 
  Ph: DWORD; 
begin 
  FillChar(exInfo, SizeOf(exInfo), 0); 
  with exInfo do 
  begin 
    cbSize := SizeOf(exInfo); 
    fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT; 
    Wnd := GetActiveWindow(); 
    ExInfo.lpVerb := 'open'; 
    lpFile := PChar(FileName); 
    nShow := SW_SHOWNORMAL; 
  end; 
  if ShellExecuteEx(@exInfo) then 
  begin 
    Ph := exInfo.HProcess; 
  end 
  else 
  begin 
    ShowMessage(SysErrorMessage(GetLastError)); 
    Exit; 
  end; 
  while WaitForSingleObject(ExInfo.hProcess, 50) <> WAIT_OBJECT_0 do 
    Application.ProcessMessages; 
  CloseHandle(Ph); 
end; 

// To Test it 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
  if ExtractRes('EXEFILE', 'TESTFILE', NOTEPAD_FILE) then 
    if FileExists(NOTEPAD_FILE) then 
    begin 
      ShellExecute_AndWait(NOTEPAD_FILE); 
      ShowMessage('Notepad finished!'); 
      DeleteFile(NOTEPAD_FILE); 
    end; 
end; 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
  NOTEPAD_FILE := GetTempDir + 'Notepad_FROM_RES.EXE'; 
end;
 



С наилучшими пожеланиями, Oleg Prosvetov.
--~--~---------~--~----~------------~-------~--~----~
-~----------~----~----~----~------~----~------~--~---

Ответить