![]() |
Daten in EXE speichern
Hallo,
ich bin zwar mit der Hilfe sehr schnell fündig geworden, jedoch ergab sich keine komplette Antwort auf diese Frage: Ich möchte gerne, wie es die Überschrift schon sagt, in eine EXE Datei eine Zeile anfügen, die nur einen Pfad (also string) beinhaltet. Ich habe schon herausgefunden, dass ich das mit Blockread und Blockwirte anstellen soll, aber wie? Zwar habe ich mit Blockread und Blockwrite schon ein wenig Erfahrungen gesammelt ;), abr dazu reicht es wohl nicht aus. Ich weiß nicht, ob beim Starten die EXE den Pfad ignoriert in der letzten Zeile oder eine Fehlermeldung ausgibt. Muss ich das vorher rausfiltern? Also wie kann ich eine Zeile speichern, löschen und einlesen? Um Codes wäre ich sehr dankbar ;) Falls das Ganze in der falschen Spalte gelandet sein sollte, bitte ich dies zu entschuldigen. MfG Chrissi91 //edit: Das Angefügte soll nicht verschlüsselt werden ;) |
Re: Daten in EXE speichern
|
Re: Daten in EXE speichern
um was ganz hinten an die Datei anzuhängen, musst du sie erst kompilieren. Dann kannst du mit einem anderen Delphiprogramm oder einem geeigneten Editor Daten dazuschreiben. Das würd ich so machen:
Delphi-Quellcode:
dann kann sich die EXE so auslesen:
EXE-DATEI, NICHT VERÄNDERN (Notepad macht das automatisch, da es bestimmte Zeichen nicht speichern kann)
< anzuhängende Daten > größe der EXE-DATEI: longint
Delphi-Quellcode:
wenn du aber nur einen String speichern willst, würde doch auch eine globale Konstante reichen?
var
f:file of byte; l:longint; begin filemode:=0; assignfile(f,application.exename); reset(f); seek(f,sizeof(f)-4); blockread(f,l,4); seek(f,l); /////Hier kannst du jetzt mit read oder blockread die Daten auslesen. closefile(f); end;
Delphi-Quellcode:
const pfad:string='C:\qwertzuiop\asdfghjklöä\'´;
|
Re: Daten in EXE speichern
Ich glaube du verstehst mich miss ...
Das Programm soll einen immer wieder benutzten Pfad speichern, soll also benutzerfreundlich sein ;) und das soll einfach nur an die exe ;) ![]() Das verstehe ich da nicht:
Delphi-Quellcode:
Das soll ja eine Variable sein, aber warum das =205312?
const ExeSize=205312;
|
Re: Daten in EXE speichern
da gabs mal was, ich weiß nur nicht mehr, wo der code ist. eine exe-datei hat nämlich einen header, in dem die effektive größe der _ausführbaren_ datei drinne steht. was dahinter ist, ignoriert windows beim ausführen einfach. den header muss man also auslesen, und kann dann fröhlich alles hintendran auslesen/schreiben.
|
Re: Daten in EXE speichern
wie ich oben geschrieben hab. du schreibst die größe des ausführbaren codes einfach hinten hin, das kannst du immer auslesen (seek(filesize(f)-4))
Die EXE kann zur Laufzeit nicht geschrieben werden. Das müsstest du über eine DLL machen, die zur Laufzeit der EXE geladen wird, dann wartet bis die EXE zu ist, und dann in die EXE schreibt. (viel zu kompliziert. mach ne tinifile (unit inifiles) oder die registry |
Re: Daten in EXE speichern
Mit registry meinst du sicherlich die Registrierungsdatenbank ... Wie geht das? ;)
|
Re: Daten in EXE speichern
probier mal tregistry in der Unit registry.
Zitat:
Delphi-Quellcode:
(jetzt gerade getestet, write geht noch nicht :?)
procedure savedirname(dirname:string);
var r:tregistry; begin r:=tregistry.create(HKEY_CURRENT_USER); r.openkey('Software\hersteller\progname\',true); r.writestring('dirname',dirname); r.free; end; function getdirname:string; var r:tregistry; begin r:=tregistry.create(HKEY_CURRENT_USER); r.openkey('Software\hersteller\progname\',true); result:=r.readstring('dirname'); r.free; end; sorry für das von vorhin, treginifile is was anderes (was genau :?: :roll: :| ) |
Re: Daten in EXE speichern
Sorry, aber mit der Regiertrierungsdatenabnk hatte ich bis jetzt noch nie etwas gemacht ... Das Beispiel (danke dafür ;)) ist zwar sehr schön, aber könntest du einfach mal inein Verzeichnis 'test' oder sowas schreiben?
Und nochwas ... Ist das nun lesen oder schreiben? Ich bräuchte natürlich beides ... aso jetzt is es ja da ;) edit:
Delphi-Quellcode:
den sinn verstehe ich net :?: steht doch darüber, oder? 2mal das gleiche ?
function getdirname:string;
var r:tregistry; begin r:=tregistry.create(HKEY_CURRENT_USER); r.openkey('Software\hersteller\progname\',true); result:=r.readstring('dirname'); r.free; end;
Delphi-Quellcode:
das liest es ja ein, aber was ist 'dirname'? name des schlüssels oder wie?
result:=r.readstring('dirname');
|
Re: Daten in EXE speichern
Zitat:
@ichbins: Es fehlen jegliche Ressourcenschützblöcke und Openkey leifert einen Rückgabewert zurück, den man nicht ignorieren sollte. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz