скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

Добавить EXE файл в своё приложение и запустить его



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;






Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook