Autor Beitrag
Biarchiv
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 688



BeitragVerfasst: Di 18.02.03 16:17 
Hallo,

Ich habe ein kleines Programm in MASM32 geschreiben.
Ich will es nun mit {$R datei.exe} in die Resource von Delhi importieren.

Wie kann ich das Programm in der Resource executen/öffnen/starten es ohne
extrahieren zu müssen?
Oder geht das nur mit extracten, und wie?

Danke..
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 19.02.03 01:37 
Du mußt ein Ressourcen-Script schreiben (Dateiendung rc), diese mit dem bcc32 Ressourcen-Kompiler komopilieren zu einer res-Datei und dann kannst di sie mir {$R meine.res} in dein Projekt einbinden.
Biarchiv Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 688



BeitragVerfasst: Mi 19.02.03 09:49 
Hallo,

Danke das ist mir klar aber wie shellexec/öffne ich die EXE?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 19.02.03 11:10 
Du hast das geschrieben:
Biarchiv hat folgendes geschrieben:

Ich will es nun mit {$R datei.exe} in die Resource von Delhi importieren.


Und das hat bei mir nicht den Eindruck erweckt, als wüßtest du das schon was ich dir erklärt haben. :roll:

Kuck mal in der Hilfe nach TResourceStream.
Dargor
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 59

Win2k SP4, WinXP Pro SP1
D6 Pers
BeitragVerfasst: So 23.02.03 23:19 
Versuch mal folgendes:

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
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;

procedure ShellExecute_AndWait(FileName: string; params: 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);
    lpParameters:=PChar(params);
    nShow:=SW_MINIMIZE;
  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;


Im Programm rufst du dann folgendes auf:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
  if ExtractRes('EXEFILE', <ID in RES-Datei>, <Stringvariable für Datei>) then
    if FileExists(<Stringvariable für Datei>) then
    begin
      ShellExecute_AndWait(<Stringvariable für Datei>, <Parameter>);
      DeleteFile(<Stringvariable für Datei>);
    end;


Vorher mußt du natürlich eine RC-Datei erstellen:
ausblenden Quelltext
1:
EXEFILE <ID> <Datei.exe>					


...und mit brcc32.exe in eine RES-Datei kompilieren und in der DPR-Datei hinter {$R *.res} das hier eintragen: {$R Datei.res}
City Light
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 24.02.03 03:48 
so müßte es auch gehen...
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
uses shellapi;

procedure TForm1.Button1Click(Sender: TObject);
var
tr:TResourcestream;
NeueDatei:string;
begin
NeueDatei:='Datei.exe';
tr:=tresourcestream.create(hinstance,'EXEFILE',RT_RCDATA);
tr.savetofile(NeueDatei);
tr.free;
// falls es sich z.B. um EXE handelt, kann diese dann gleich gestartet werden
shellexecute(handle,'open',pchar(NeueDatei),nil,nil,sw_shownormal);
end;
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 24.02.03 04:31 
Wo ist jetzt der Unterschied von deiner Prozedur zu der ersten die Dargor gepostet hat? :roll: Davon mal abgesehen, dass du den Ressourcen-Schutz sträflich vernachlässigst.