| Autor |
Beitrag |
F.Art
      
Beiträge: 434
|
Verfasst: So 12.01.03 21:05
Ich möchte eine fremde EXE in meine mit einbringen möchte aber keine EXE joiner benutzen sondern das selbst ein binden.
|
|
Popov
Gast
Erhaltene Danke: 1
|
Verfasst: So 12.01.03 21:49
| Zitat: | Eine Datei in einer Applikation einbinden und sie ausführen.
Autor: Thomas Stutz << Homepage: www.swissdelphicenter.ch >>
1. Starte Notepad und erstelle ein .rc-file, das etwa so aussieht:
TESTFILE EXEFILE C:\Windows\Notepad.exe
(Stelle sicher, dass der Pfad zur Exe-Datei korrekt ist!)
2. Speichere es als myres.rc
3. Kompiliere die Datei mit brcc32.exe
(Im Delphi-bin Verzeichnis) um die Datei myres.res zu erhalten.
4. Kopiere myres.res in das entsprechende Projekt-Verzeichnis.
usw ... |
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: So 12.01.03 22:38
ich habe das leider nicht ganz geschnallt, geht das vieleicht etwas ausführlicher
|
|
Popov
Gast
Erhaltene Danke: 1
|
Verfasst: So 12.01.03 23:01
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: So 12.01.03 23:09
mit notepad eine datei erstellen namens test.rc
in die datei den text (TESTFILE d:\generieren.exe C:\Windows\Notepad.exe)
?????
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 13.01.03 08:12
@Popov: Warum gibst du ihm nicht wemfalls den kompletten Link?
www.swissdelphicente.../showcode.php?id=594
@F.Art. Wenn du das jetzt nicht verstehest, dann wird es echt schwer, für dich, wie auch für uns es dir zu erklöären.
|
|
Popov
Gast
Erhaltene Danke: 1
|
Verfasst: Mo 13.01.03 08:19
| Luckie hat folgendes geschrieben: | | @Popov: Warum gibst du ihm nicht wemfalls den kompletten Link? |
Weil ich den Tip mal selbst umgesetzt habe und dabei auch die Anleitung als Kommentar mit gepackt habe. Das Zitat ist also aus meiner Unit kopiert und nicht von der Webpage.
|
|
Dargor
      
Beiträge: 59
Win2k SP4, WinXP Pro SP1
D6 Pers
|
Verfasst: Mo 13.01.03 08:21
Also, wenn man dem Link folgt, wird zwar sehr ausführlich beschrieben, wie man ein EXE-Datei in eine EXE-Datei einbindet und diese dann ausführt, aber wie sieht das ganze aus, wenn ich die eingebundene Datei mit Parametern aufrufen will (analog zum winexec-Befehl)?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 13.01.03 08:25
|
|
Popov
Gast
Erhaltene Danke: 1
|
Verfasst: Mo 13.01.03 08:30
| Dargor hat folgendes geschrieben: | | ..., aber wie sieht das ganze aus, wenn ich die eingebundene Datei mit Parametern aufrufen will [...]? |
Das ist nur packen und entpacken. Der Rest ist wie gehabt.
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Mo 13.01.03 08:40
| F.Art hat folgendes geschrieben: | mit notepad eine datei erstellen namens test.rc
in die datei den text (TESTFILE d:\generieren.exe C:\Windows\Notepad.exe)
????? |
Warum schreibst Du das mit c:\Windows\Notepad.exe dort hin? In der o. geposteten Anleitung wird der Notepad nur als Beispiel benutzt. Du hast ja schon Deine Anwendung mit d:\generieren.exe angegeben. Also pack den link zum Notepad weg!
Gruß
TINO
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: Mo 13.01.03 15:48
Habe noch irgendwie probleme und folgendes habe ich fabriziert.
mit einem texteditor habe ich myres.rc file im verzeichnis meines projectes erstellt. und folgendes alt text eingetragen 'beide.exe fremde.exe '
dann habe ich die brcc32.exe mit in das projectverzeichnis kopiert und bin über dos dorthin gesprungen.
dann habe ich Brcc32.exe –32 @<myres.rc> myres.res eingegeben und habe eine myres.res datei bekommen.
dann habe ich diesen source benutzt
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: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) procedure Button1Click(Sender: TObject); private public end;
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;
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); 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;
procedure TForm1.Button1Click(Sender: TObject); begin if ExtractRes('fremde.exe', 'beide.exe', 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;
end. |
dann compeliert und folgendes kam dann
| Zitat: | | [Hint] Unit1.pas(39): Value assigned to 'ExtractRes' never used |
Moderiert von Tino: Code- durch Delphi-Tags ersetzt.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 13.01.03 16:26
| F.Art hat folgendes geschrieben: | | und folgendes alt text eingetragen 'beide.exe fremde.exe ' |
Es scheint ja unheimlich schwer zu sein diese Zeile:
Quelltext 1:
| TESTFILE EXEFILE C:\Windows\Notepad.exe |
An deine Bedürfnisse anzu passen. 
|
|
Popov
Gast
Erhaltene Danke: 1
|
Verfasst: Mo 13.01.03 16:26
Zuerst: packe bitte in Zukunft deine Delphi-Codes in die Code-Tags. Einfach oben Code-Button klicken, Code einfügen, Button ein zweites mal zum schließen klicken.
Bitte beachte auch was in der Anleitung steht:
| Zitat: | | TESTFILE EXEFILE C:\Windows\Notepad.exe |
Das was du erstellst ist eine Ressorce. Wenn du also den oberen Text eingibst, dann ist das so:
TESTFILE ist der String und ist der Ressorce-Typ (HInstance). Der Ressorce-Typ hat also die Bezeichnung "TESTFILE". Du kannst auch eine andere Bezeichnung wählen, z.B. "FILE". Später greifts du über die Bezeichnung auf die Ressorce zu.
EXEFILE ist der String und ist der Ressorce-Name (Resname). Der Ressorce-Name hat also die Bezeichnung "EXEFILE". Du kannst auch eine andere Bezeichnung wählen, z.B. "MY_EXEFILE". Später greifts du über die Bezeichnung auf die Ressorce.
Irgendwann mußt du die Ressorce dann extrahieren (z.B. mit der Funktion im Beispiel "ExtractRes") . Dann ist es eine gute Idee auf die vielen Ressorcen über die Typ-Bezeichnung und den Namen der Ressorce zuzugreigen. :
Quelltext 1:
| ExtractRes('TESTFILE', 'EXEFILE', 'c:\temp\testprogramm.exe'); |
Und schon hast du die Datei extrahiert. Der Rest ist wie gehabt. Du hast eine Datei im Tempverzeichnis und kannst sie starten wie du willst.
Also ich hab nicht gedacht, daß du das Beispiel übernimmst ohne dir auch die Funktionen zumindes anzugucken. Dann hättest du auch verstanden um was es geht.
PS: Natürlich muß du die Resorce auch in deinem Programm vorher einkompilieren.
Quelltext 1:
| {$R die_zweite_exe.res} |
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: Mo 13.01.03 17:51
was soll [Error] RLINK32: Unsupported 16bit resource in file "myres.res" bedeuten?
So wie ich das sehe wird das ins temp abgespeichert kann man das nicht ins ram speichern und steuern?
|
|
Popov
Gast
Erhaltene Danke: 1
|
Verfasst: Mo 13.01.03 18:31
Was hällst du davon in Zukunft gleich bei der ersten Frage deine besonderen Wünsche mitzuteilen. Viele Leute könnten sich dann unnötige Antworten sparen und würdest schneller die passende Antwort kriegen.
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: Mo 13.01.03 19:07
das war ne überlegun die erst später kam.
ich versuche delphi zu lernen und habe halt regelmäsig ideen die ich umsetzen möchte.
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: Do 16.01.03 14:42
ich habs nochmal versucht aber da kommt immer noch ein anderer fehler.
[Hint] Unit1.pas(42): Value assigned to 'ExtractRes' never used
[Error] RLINK32: Unsupported 16bit resource in file "D:\exe-test\myres.res"
er springt in diese Zeile
Quelltext 1:
| NOTEPAD_FILE := GetTempDir + 'Notepad_FROM_RES.EXE'; |
Was habe ich diesmal falsch gemacht?
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: So 15.06.03 19:25
Ich habe nun die myres.res im Project mit drinnen.
Wie starte ich diese und lasse es steuern?
Es ist ein DOS programm mit Parameter eingabe.
Es sollte auch im Speicher ausgeführt werden und nicht auf HD gespeichert.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 15.06.03 20:29
Also, im SDC sthet Code, den man per Copy and Paste in sein programm übernehmen kann. Das einzigeste, was man anpassen muß ist die Ressource. Dazu sage ich jetzt nichts mehr.
Und zu den Parametern kuck dir mal die Struktur von SHELLEXECUTEINFO an, die ich oben gepostet habe. Darauf habe ich dich übrigens schon mal hingewiesen.
Im Speicher ausführen geht nur unter NT-basierenden Systemen. Dazu habe ich auch Sourcecode, aber wenn du schon nicht in der Lage bist den Code vom SDC zu benutzen, dann wird dir das erst recht nichts nützen.
|
|