xperience2003 's Tip ist wohl der einfachste.
anonsten gibts da die DataSection (in die du auch zb. per IncludeBInary zeug anhängen kannst). Um das ganze zu verändern etc gibts im CodeArchiv genug Beispiele:
Siehe zb. hier:
http://www.purearea.net/pb/CodeArchiv/O ... difying.pb
Thalius
Kompiliertes Programm nachträglich verändern?
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Ich hab mal schnell ein Beispiel für dich gemacht, wie ich es machen
würde:
Zuerst der Source für die inkludierte EXE. Einfach zu "Programm.exe"
kompilieren.
Und jetzt der Source zum Hauptprogramm, das die "Programm.exe"
inkludiert. Wenn die "Programm.exe" existiert, einfach mal ausführen.
Ich habe jetzt nichts kommentiert. Aber da der Source so kurz ist, sollte es
leicht verständlich sein.
würde:
Zuerst der Source für die inkludierte EXE. Einfach zu "Programm.exe"
kompilieren.
Code: Alles auswählen
Procedure.s GetText()
Protected FileID.l, Size.l, length.l, Text.s
FileID = ReadFile(#PB_Any, ProgramFilename())
If FileID
Size = Lof(FileID) - 4
FileSeek(FileID, Size)
length = ReadLong(FileID)
FileSeek(FileID, Size - length - 1)
Text = ReadString(FileID, #PB_Ascii)
CloseFile(FileID)
EndIf
ProcedureReturn Text
EndProcedure
Define Text.s
Text = GetText()
If OpenWindow(0, 0, 0, 400, 300, Text, #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
CloseWindow(0)
EndIf
inkludiert. Wenn die "Programm.exe" existiert, einfach mal ausführen.
Code: Alles auswählen
Define Text.s, a.l, Path.s
Text = InputRequester("Titel", "Was soll in der Titelzeile stehen?", "Irgendwas")
If Text = "" : End : EndIf
Path = GetPathPart(ProgramFilename())
a = 1
While FileSize(Path + "Programm_" + Str(a) + ".exe") >= 0
a + 1
Wend
Path + "Programm_" + Str(a) + ".exe"
If CreateFile(0, Path)
WriteData(0, ?Program_Start, ?Program_End - ?Program_Start) ;EXE schreiben
WriteString(0, Text, #PB_Ascii) ;Text schreiben
WriteByte(0, 0)
WriteLong(0, Len(Text)) ;Textlänge schreiben
CloseFile(0)
EndIf
RunProgram(Path)
DataSection
Program_Start:
IncludeBinary "Programm.exe"
Program_End:
EndDataSection
leicht verständlich sein.
hab auch was gebaut.
funktioniert so, wie xperience2003 es erklärt hat.
als "myexe.exe" compilieren
das programm gibt auf der console "8" aus.
und das hier als irgendwas im selben ordener kompilieren.
jedesmal wenn es ausgeführt wird, wird die datasection von myexe.exe manipuliert, sodass myexe.exe nicxht mehr "8", sondern "9", "10", und so weiter ausgibt
funktioniert so, wie xperience2003 es erklärt hat.
als "myexe.exe" compilieren
das programm gibt auf der console "8" aus.
Code: Alles auswählen
OpenConsole()
Read label.s
Read n
Print(Str(n))
Input()
DataSection
Data.s "++LABEL++"
Data.l 8
EndDataSection
jedesmal wenn es ausgeführt wird, wird die datasection von myexe.exe manipuliert, sodass myexe.exe nicxht mehr "8", sondern "9", "10", und so weiter ausgibt
Code: Alles auswählen
labelname.s = "++LABEL++"
OpenFile(0,"myexe.exe")
While Not Eof(0)
b=ReadByte(0)
found=1
For i=1 To Len(labelname)
If Not (Chr(b) = Mid(labelname,i,1))
found=0
Break
EndIf
b=ReadByte(0)
Next
If found
pos=Loc(0)
n=ReadLong(0)
FileSeek(0,pos)
WriteLong(0,n+1)
EndIf
Wend
CloseFile(0)
- PureBasic4.0
- Beiträge: 785
- Registriert: 29.10.2006 17:26
- Wohnort: 127.0.0.1