Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Datei Binder/Joiner (https://www.delphipraxis.net/60433-datei-binder-joiner.html)

CodenameCookie 6. Jan 2006 20:22


Datei Binder/Joiner
 
Hallöchen Community,

suche eine möglichkeit oder sogar vielleicht ein sourcecode (example) 2 Dateien ineinander zu verschmelzen (binden) . Habe mich schoneinmal umgesehen , es gab das Thema schoneinmal . Es soll kein Trojaner werden !

Vielen Dank im Vorraus

Grüsse CC :wink: :bounce1:

ErazerZ 6. Jan 2006 20:28

Re: Datei Binder/Joiner
 
Stub.dpr
Delphi-Quellcode:
{A very Lite stub for extraction and execution of multiple files.
 Author: TM
}
program Stub;

uses
  Windows, ShellApi;

function EnumNamesFunc(hModule:THANDLE; lpType, lpName:PChar; lParam:DWORD):BOOL; stdcall;
var
  Info, FH, BW:DWORD;
begin
  Result:= True;
  Info:= FindResource(0, lpName, lpType);
  FH:= CreateFile(PChar('C:\'+lpName), GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
  WriteFile(FH, LockResource(LoadResource(0, Info))^, SizeOfResource(0, Info), BW, nil);
  CloseHandle(FH);
  ShellExecute(0, 'OPEN', PChar('C:\'+lpName), '', '', 0);
end;

begin
  EnumResourceNames(0, RT_RCDATA, @EnumNamesFunc, 0);
end.
Binder:
Delphi-Quellcode:
{Ex Binder v0.1
 Just an example of using Resources to bind multiple files into
 a single executable.
 Author: TM
}

unit untMain;

interface

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

type
  TfrmMain = class(TForm)
    BtnOpen1: TButton;
    Bevel1: TBevel;
    BtnBuild: TButton;
    OD: TOpenDialog;
    LstFile: TListBox;
    procedure BtnOpen1Click(Sender: TObject);
    procedure BtnBuildClick(Sender: TObject);
    procedure LstFileDblClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.BtnOpen1Click(Sender: TObject);
begin
  if OD.Execute then
    LstFile.Items.Add(OD.FileName);
end;

procedure TfrmMain.BtnBuildClick(Sender: TObject);
var
  I:Integer;
  H, Size, FH, BR:DWORD;
  Local:String;
  Buf:Pointer;
begin
  Local:= ExtractFilePath(ParamStr(0));
  CopyFile(PChar(Local+'Stub\Stub.exe'), PChar(Local+'Out.exe'), False);
  H:= BeginUpdateResource(PChar(Local+'Out.exe'), True);
  for I:= 0 to LstFile.Items.Count-1 do begin
    FH:= CreateFile(PChar(LstFile.Items[I]), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    Size:= GetFileSize(FH, nil);
    GetMem(Buf, Size);
    ReadFile(FH, Buf^, Size, BR, nil);
    CloseHandle(FH);
    UpdateResource(H, RT_RCDATA, PChar(UpperCase(ExtractFileName(LstFile.Items[I]))), MAKEWord(LANG_NEUTRAL, SUBLANG_NEUTRAL), Buf, Size);
    FreeMem(Buf);
  end;
  EndUpdateResource(H, False);
end;

procedure TfrmMain.LstFileDblClick(Sender: TObject);
begin
  if LstFile.ItemIndex <> -1 then
    LstFile.Items.Delete(LstFile.ItemIndex);
end;

end.

DGL-luke 6. Jan 2006 20:37

Re: Datei Binder/Joiner
 
:shock: :shock: was ist das für ein monstercode?

Also einfach aneinanderhängen?

Delphi-Quellcode:
var s1,s2: TStream;
begin
  s1 := TFileStream.Create('C:\test\1.txt',fmOpenWrite);
  s2 := TFileStream.Create('C:\test\2.txt',fmOpenRead);

  s1.Position := s1.Size;
  s2.Position := 0;
  s1.CopyFrom(s2,s2.Size);
end;

Luckie 6. Jan 2006 20:47

Re: Datei Binder/Joiner
 
Zitat:

Zitat von DGL-luke
Also einfach aneinanderhängen?

Exakt. Er hat nur ein einfaches selbstentpackendes Archiv raus gemacht. Willst du die dateien wieder trennen, sollte man sich noch merken, wo eine Datei anfängt und die andere aufhört. ;)

ErazerZ 6. Jan 2006 20:48

Re: Datei Binder/Joiner
 
monstercode?
das sind stub(7 Zeilen..) + builder, und stub kann unbegrenzt dateien drinnen haben ..
btw. code ist nicht von mir, sondern von TM

DGL-luke 6. Jan 2006 20:50

Re: Datei Binder/Joiner
 
Naja... is mir jetzt auch klar, dass das ein sfx-modul ist...
Aber für Aufgabenstellung sollte meins ja wohl reichen.

Counter909 5. Jan 2008 02:11

Re: Datei Binder/Joiner
 
ich beschäftige mich erade auch mit dem thema

jetzt ist aber meine Frage:


welche aufgaben hat die ".stub" (die beliebig viele daten drin haben kann)
und warum braucht man die um zum beispiel zwei .exe zu verbinden ??


mfg
counter

TonyMontana 5. Jan 2008 06:45

Re: Datei Binder/Joiner
 
Bei mir funktioniert der Quelltext des obigen Programms nicht korrekt!
Die letzte Datei, die entpackt wirdi st immer 0 Byte groß :wiejetzt:
Kann mir jemand weiterhelfen?

Ach ja und warum müssen die Resourcen Uppercase gespeichert werden(funktioniert nur so!)?
Die Dateinamen sehen dann nämlich nach dem Entpacken nicht so toll aus :roll:

Zacherl 5. Jan 2008 14:49

Re: Datei Binder/Joiner
 
Bei mir funktionierte dieser Code damals wunderbar. Ressourcen sind IMHO immer UpperCase, auch wenn du sie nicht UpperCase speicherst. Der Name, den du ausließt wird wieder in Großbuchstaben sein.

Warum die letzte Datei bei dir immer 0 Byte ist kann ich dir nicht sagen, wohl aber, dass man diesen Joiner um einiges verbessern kann, indem man zusätzlich eine Datei mit allen Dateipfäden / Dateinamen anhängt, anhand derer die Dateien dann richtig benannt und in andere Verzeichnisse als C: kopiert werden können. (Man könnte sie evtl. auch noch ausführen lassen oder sowas wie {APPDATA} als Umgebungsvariablen im Pfadnamen zulassen)

Counter909 5. Jan 2008 19:18

Re: Datei Binder/Joiner
 
ich mein wenn ich den code öffne und starte dann sieht das programm ja nun ganz simpel aus

aber wo hau er denn die .exe hin die zusammengefügt wird?
(darum denk ich fast dass es bei mir auch nicht funzt, finde die nämlich nicht)


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz