Seite 2 von 2

Verfasst: 01.10.2007 18:05
von Thalius
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

Verfasst: 01.10.2007 20:09
von NicTheQuick
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.

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
Und jetzt der Source zum Hauptprogramm, das die "Programm.exe"
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
Ich habe jetzt nichts kommentiert. Aber da der Source so kurz ist, sollte es
leicht verständlich sein.

Verfasst: 01.10.2007 20:56
von #NULL
hab auch was gebaut.
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
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

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)

Verfasst: 02.10.2007 20:53
von PureBasic4.0
Danke, besonders das letzte Beispiel war ziemlich einfach. :allright: