Platzhalter in Programm1.exe mit Programm2.exe verändern

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

Code: Alles auswählen

Procedure.l ReplaceFileData(filename.s, outputfilename.s, *searchdata.l, searchdataLen.l, *replacedata, replacedataLen.l)
Die Prozedur lässt sich z.B. folgendermaßen aufrufen:

Code: Alles auswählen

ReplaceFileData("Programm1.exe", "NeuesProgramm1.exe", @"Dieser Text soll von Programm2.exe ersetzt werden", 50, "Hiermit, ohja und zwar mit einem anderen String..", 50)
oder (dasselbe in Grün):

Code: Alles auswählen

finde.s = "Dieser Text soll von Programm2.exe ersetzt werden"
schreibe.s = "Hiermit, ohja und zwar mit einem anderen String.."
ReplaceFileData("Programm1.exe", "NeuesProgramm1.exe", @finde, Len(finde), @schreibe, Len(schreibe))
Ich hoffe, das hilft weiter.
!UD2
Benutzeravatar
Tracker
Beiträge: 53
Registriert: 22.11.2005 21:46
Computerausstattung: Intel Core 2 Quad Q6600, 2,4 GHZ, 2 GB RAM, NVidia GeForce 8600 GT 512 MB, Windows XP Prof. SP3, PureBasic v4.51

Beitrag von Tracker »

Vielen Dank für das Beispiel :)
Ich werde es morgen ausprobieren und schreiben, ob es geklappt hat.
Ein fehlerfreies Programm ist der Traum jedes Programmierers
Benutzeravatar
Tracker
Beiträge: 53
Registriert: 22.11.2005 21:46
Computerausstattung: Intel Core 2 Quad Q6600, 2,4 GHZ, 2 GB RAM, NVidia GeForce 8600 GT 512 MB, Windows XP Prof. SP3, PureBasic v4.51

Beitrag von Tracker »

@Froggerprogger
Vielen Dank für dein Beispiel!
Ich tue mir oft schwer mit der Syntax der Parameterübergabe.

Dein Programm ReplaceFileData.pb ist Spitze!
Es macht genau das, was ich wollte und ich brauche mich nicht mit Speicherbefehlen herumzuschlagen.

Ich habe mal das folgende kleine Beispiel erstellt:

Code: Alles auswählen

;=== Start der Programm1.exe ===
Restore Platzhalter
Read Platzhalter$
Platzhalter$ = RTrim(Platzhalter$)
MessageRequester("ReplaceFileData-Beispiel",Platzhalter$,0)

DataSection
   Platzhalter:
   Data.s "Platzhalter-String, der ersetzt werden soll"
EndDataSection
;=== Ende der Programm1.exe ===

Code: Alles auswählen

;=== Start von Programm2.exe ===
IncludeFile "ReplaceFileData_Include.pb"

InputFile$  = "Programm1.exe"
OutputFile$ = "Programm1.exe"
Suchen$     = "Platzhalter-String, der ersetzt werden soll"
Ersetzen$   = "Geänderter String in der DataSection" 
laenge.l    = Len(Suchen$)

If Len(Ersetzen$) > laenge
   Ersetzen$ = Left(Ersetzen$,laenge)
Else
   Ersetzen$ + Space(laenge-Len(Ersetzen$))
EndIf

ReplaceFileData(InputFile$, OutputFile$, @Suchen$, laenge, @Ersetzen$, laenge)
;=== Ende von Programm2.exe ===
Die Programm1.exe ist die EXE-Datei, deren Platzhalterstring von der Programm2.exe geändert werden soll.
Vor der Änderung gibt die Programm1.exe den standardmäßigen Platzhalterstring aus.

Für die Programm2.exe habe deine ReplaceFileData.pb in ReplaceFileData_Include.pb umbenannt und eingebunden.
Zuerst werden die Übergabeparameter vorbereitet.
Bedingung ist, dass der Suchen-String und der Ersetzen-String die gleiche Länge haben wie der Platzhalter in der Programm1.exe, sonst wird diese beschädigt und kann nicht mehr gestartet werden.
Ist Ersetzen$ länger als Suchen$, wird Ersetzen$ auf die Länge von Suchen$ gekürzt, ansonsten wird der Rest von Ersetzen$ mit Leerzeichen aufgefüllt.
Beim Start der Programm2.exe wird mit deiner Funktion ReplaceFileData() der Platzhalterstring in Programm1.exe mit dem Inhalt von Ersetzen$ überschrieben.
Wird Programm1.exe danach gestartet, wird der geänderte String aus der DataSection ausgelesen und angezeigt.
Überflüssige Leerzeichen rechts wurden vorher mit Rtrim entfernt.

Jetzt kenne ich einige alternative Möglichkeiten Strings in einer anderen EXE-Datei zu ändern.

Das einzige Problem, das ich noch habe, um mein Programm fertigzustellen ist, dass ich nicht weiß, wie ich das Icon einer bestehenden Programm1.exe mit einer Programm2.exe dauerhaft zuweisen kann.
Aber diese Frage habe ich in einem anderen Thema gepostet.

@All
Danke für eure Hilfe :)
Ein fehlerfreies Programm ist der Traum jedes Programmierers
Antworten