Restore Platzhalter
Read Optionen$
MessageRequester("Testprogramm.exe",Optionen$,0)
DataSection
Platzhalter:
Data.s "Optionenbereich, der geändert werden soll"
PlatzhalterEnde:
EndDataSection
Wenn ich ein Programm weitergebe und auf externe Ini-Dateien und Registry-Einträge verzichten will, gibt es die Möglichkeit mit PureBasic in der DataSection gespeicherte Daten nicht nur zu Lesen, sondern auch zu Schreiben?
Der Anwender soll z.B. Optionen, die er verändert im Programm speichern können.
Kennt jemand ein Codebeispiel, ob und wie das Schreiben in Verbindung mit DataSection-Befehlen funktioniert?
Ein fehlerfreies Programm ist der Traum jedes Programmierers
generell zu datensektionen, du kannst den inhalt in variablen laden
und diese dann verändern
diese optionen wirst du dann erstmal extern speichern müssen
das das programm dann aus dem gespeicherten optionen ließt ,
wenn diese nicht vorhanden, dann die datazeilen auslesen
du hast ja die möglichkeiten eine ini oder textdatei irgentwo
im system anzulegen
andere sache der externen möglichkeiten wäre zb ein registry eintrag
wenn du garkeine daten speichern willst, aber der text dennoch anders sein
soll müsstest du die exe selbst verändern^^
selfmodifying executable...geht, müssteste mal im englischen furum suchen
Danke für den Hinweis!
Im englischen Forum könnte ich auch mal nachsehen.
Ich habe mich auf verschiedenen Webseiten schon umgesehen, aber in Verbindung mit DataSection immer nur lesende Beispiele gefunden.
Mich würde speziell zu DataSection interessieren, ob ein Überschreiben überhaupt vorgesehen bzw. möglich ist.
Beispiel:
Für einen Screensaver kann ich eine EXE-Datei (z.B. Screensaver.EXE) in eine SCR-Datei (z.B. Screensaver.SCR) umbenennen.
Die Screensaver.SCR kann unter Windows genauso gestartet werden, wie eine EXE-Datei.
Die Screensaver.SCR kopiere ich nach C:\Windows und binde sie unter "Systemsteuerung - Anzeige" als Bildschirmschoner ein.
Jetzt habe ich natürlich kein Interesse daran, dass mein Bildschirmschoner auf einem fremden Rechner irgendwelche INI-Dateien in C:\Windows ablegt oder die Registry verändert.
Ich will keinen Müll auf anderen Rechnern hinterlassen.
In diesem speziellen Beispiel wäre ich natürlich daran interessiert, dass evtl. Änderungen (z.B. die Bildschirmauflösung) in der Screensaver.SCR gespeichert werden.
Daher nochmal die Frage, gibt es reguläre Befehle in PureBasic, um Werte in der DataSection nicht nur zu lesen, sondern diese auch zu verändern?
Ein fehlerfreies Programm ist der Traum jedes Programmierers
Tracker hat geschrieben:Daher nochmal die Frage, gibt es reguläre Befehle in PureBasic, um Werte in der DataSection nicht nur zu lesen, sondern diese auch zu verändern?
Klare Frage, klare Antwort: Nein, reguläre PB-Befehle hierfür gibt es nicht.
Der Trick mit dem schon angesprochenen selfmodifying ist wohl die einzige Möglichkeit.
Man soll die Tür aufmachen, bevor man durchgeht ...
Klar geht das macht es euch doch nicht so schwer....
Ihr lest die Datei komplettt in einen String oder so dort sucht ihr dann einen Platzhalter den ihr euch in die DataSection gesetzt habt und fügt dann danach die Daten ein, weil die DataSection steht im Klartext inner EXE drinne... Beispiel kann ich euch heut Nachmittag mal geben, falls gewünscht.
MFG Blackskyliner
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
@crossroads
Wenn PureBasic für DataSection keine Schreibmöglichkeiten bietet, OK, dann ist das eben so. Wollte ich nur mal bestätigt haben.
Dann werde ich die EXE-Datei für den Bildschirmschoner eben ohne Konfigurationsmöglichkeiten fertigmachen.
@Blackskyliner
Binäre EXE-Daten in einen String einlesen kann nur schiefgehen.
Die Strings sind durch Nullzeichen begrenzt und in EXE-Dateien gibt es jede Menge davon, so dass nur ein paar Bytes im String gespeichert werden.
Es gibt auch eine maximale Stringlänge, ich weiss nur im Augenblick nicht, wo bei PureBasic die Grenze liegt. Unbegrenzt lange Strings soll es, laut Interview mit Fred in den News der PureArec.net-Seite, erst in PureBasic 4.0 geben.
Man kann die EXE-Datei auch komplett in den Speicher einlesen und mit verschiedenen Tricks bearbeiten, aber das ist ein anderer Post und arbeitet nicht mit DataSection.
Trotzdem, wenn Du ein funktionierendes Codebeispiel hast, kannst Du das gerne posten. In PureBasic bin ich noch Anfänger und dankbar für alle Infos.
Ein fehlerfreies Programm ist der Traum jedes Programmierers
@Froggerprogger
Ich habe auch der PureArea.Net-Seite eine Funktion ReplaceFileData entdeckt, die du geschrieben hast und von Lars auf PureBasic 3.92+ upgedated wurde.
Wenn sie das leistet, was ich denke, könnte sie als Include-Datei eine gute alternative Lösung für mein Problem sein.
Leider weiß ich nicht richtig, wie ich die Parameter übergeben muss.
Ich habe in folgendem Forumseintrag die Frage gestellt, ob mir jemand ein Codebeispiel für den korrekten Aufruf der Funktion posten kann:
Also, um Daten direkt selber in eine EXE zu schreiben sollteste vielleicht von Data Section weg gehen . Im prinzip ist eine EXE nichts weiter als eine Datei, die halt bei Doppelklick ausgeführt wird. Somt kann man diese EXE auch dann einfach öffnen ... aber das geht nicht, wenn sie läuft.