Code: Alles auswählen
Unit logik;
{$mode ObJFPC}
interface
const daten_slash = {$IFDEF Linux} '/' {$ELSE} '\' {$ENDIF};
daten_pfad: String = '';
daten_database: String = 'dbZitate.s3db';
daten_dateiname: String = 'dbZitate.s3db';
daten_dateilokal: Boolean = true;
still: Boolean = false;
procedure sucheDatei(sDateiname: string);
procedure testEnv(value:String);
implementation
uses SysUtils, Dos {$IFNDEF Linux}, Registry {$ENDIF};
function addPfad(eins, zwei: string):string;
var temp: string;
begin
temp:=eins;
if (temp <> '') and
(temp[length(temp)] <> daten_slash) and
(zwei <> '')
then temp:=temp+daten_slash;
temp:=temp+zwei;
Result:=temp;
end;
{$IFNDEF Linux}
function GetRegZitadell(Key: string):string;
var Registry: TRegistry;
tempdir, temppfad: string;
begin
Registry := TRegistry.Create; tempdir:='';
try
Registry.RootKey := HKEY_LOCAL_MACHINE;
if Registry.OpenKeyReadOnly('\SOFTWARE\'+Key)
then tempdir:= Registry.ReadString('');
finally
Registry.Free;
end;
temppfad:=addpfad( tempdir, daten_database );
if DirectoryExists(tempdir) and FileExists(temppfad)
then result:=tempdir else result:='';
end;
{$ENDIF}
function GetEnvZitadell(Key: string):string;
var tempdir, temppfad:string;
begin
tempdir:=GetEnvironmentVariable(Key);
temppfad:=addpfad( tempdir, daten_database );
if DirectoryExists(tempdir) and FileExists(temppfad)
then result:=tempdir else result:='';
end;
procedure SetEnvZitadell(Key, Value: string);
begin
SetEnvironmentVariable(Key, Value);
end;
function GetHomeZitadell(Extension: string):string;
var tempdir, temppfad: string;
begin
tempdir:=GetUserDir;
tempdir:=addpfad( tempdir, Extension );
temppfad:=addpfad( tempdir, daten_database );
if DirectoryExists(tempdir) and FileExists(temppfad)
then result:=tempdir else result:='';
end;
function GetLwUserDirZitadell(Lw, Key: string):string;
var tempdir, temppfad:string;
begin
tempdir:=addpfad( Lw, Key );
temppfad:=addpfad( tempdir, daten_database );
if DirectoryExists(tempdir) and FileExists(temppfad)
then result:=tempdir else result:='';
end;
function GetUserDirZitadell(Key: string):string;
var temp:string;
begin
{$IFDEF LINUX}
temp:=GetLwUserDir('', Key)
{$ELSE}
temp:=GetLwUserDirZitadell('c:', Key);
if temp = '' then temp:=GetLwUserDirZitadell('C:', Key);
{$ENDIF};
result:=temp;
end;
//0: Registry (* nur Windows *)
// GetRegZitadell
// Registry \SOFTWARE\Alfware\Zitadell und ALFWARE/ZITADELL und alfware/zitadell
// Groß-/ Klein-Schreibung kann eigentlich entfallen
//
//1: Environment-Variable Zitadell
// GetEnvZitadell
// ENV Zitadell und ZITADELL und zitadell
//
//2: Home (Eigene Dateien)
// GetHomeZitadell
// USER/ . und /Zitadell und /documents und /Dokumente und /documents/Zitadell und /Dokumente/Zitadell
// USER/ /ZITADELL und /documents/ZITADELL und /Dokumente/ZITADELL
// USER/ /zitadell und /documents/zitadell und /Dokumente/zitadell
//
//3: User
// GetUserDirZitadell
// Win: c:/ C;/ /Zitadell und /Bernd/Zitadell und bernd/Zitadell
// /ZITADELL und /Bernd/ZITADELL und bernd/ZITADELL
// Linux ohne /zitadell und /Bernd/zitadell und bernd/zitadell
//
procedure zitadellPfad(psteuer: Integer);
begin
if daten_pfad <> '' then exit;
case psteuer of
{$IFNDEF Linux}
0: begin
(* Registry *)
if daten_pfad = '' then daten_pfad:= GetRegZitadell('Alfware\Zitadel1');
if daten_pfad = '' then daten_pfad:= GetRegZitadell('ALFWARE\ZITADELL');
if daten_pfad = '' then daten_pfad:= GetRegZitadell('alfware\zitadell');
end;
{$ENDIF}
1: begin
(* Environment Variable *)
if daten_pfad = '' then daten_pfad:= GetEnvZitadell('Zitadell');
if daten_pfad = '' then daten_pfad:= GetEnvZitadell('ZITADELL');
if daten_pfad = '' then daten_pfad:= GetEnvZitadell('zitadell');
end;
2: begin
(* Home-Dir *)
if daten_pfad = '' then daten_pfad:= GetHomeZitadell('');
if daten_pfad = '' then daten_pfad:= GetHomeZitadell('Zitadell');
if daten_pfad = '' then daten_pfad:= GetHomeZitadell('ZITADELL');
if daten_pfad = '' then daten_pfad:= GetHomeZitadell('zitadell');
if daten_pfad = '' then daten_pfad:= GetHomeZitadell('documents');
if daten_pfad = '' then daten_pfad:= GetHomeZitadell('Dokumente');
if daten_pfad = '' then daten_pfad:= GetHomeZitadell(addPfad('documents','Zitadell'));
if daten_pfad = '' then daten_pfad:= GetHomeZitadell(addPfad('Dokumente','Zitadell'));
if daten_pfad = '' then daten_pfad:= GetHomeZitadell(addPfad('documents','ZITADELL'));
if daten_pfad = '' then daten_pfad:= GetHomeZitadell(addPfad('Dokumente','ZITADELL'));
if daten_pfad = '' then daten_pfad:= GetHomeZitadell(addPfad('documents','zitadell'));
if daten_pfad = '' then daten_pfad:= GetHomeZitadell(addPfad('Dokumente','zitadell'));
end;
3: begin
(* User-Dir *)
if daten_pfad = '' then daten_pfad:= GetUserDirZitadell('Zitadell');
if daten_pfad = '' then daten_pfad:= GetUserDirZitadell(addPfad('Bernd','Zitadell'));
if daten_pfad = '' then daten_pfad:= GetUserDirZitadell(addPfad('bernd','Zitadell'));
if daten_pfad = '' then daten_pfad:= GetUserDirZitadell('ZITADELL');
if daten_pfad = '' then daten_pfad:= GetUserDirZitadell(addPfad('Bernd','ZITADELL1'));
if daten_pfad = '' then daten_pfad:= GetUserDirZitadell(addPfad('bernd','ZITADELL1'));
if daten_pfad = '' then daten_pfad:= GetUserDirZitadell('zitadell');
if daten_pfad = '' then daten_pfad:= GetUserDirZitadell(addPfad('Bernd','zitadell'));
if daten_pfad = '' then daten_pfad:= GetUserDirZitadell(addPfad('bernd','zitadell'));
end;
else
end;
end;
procedure sucheDatei(sDateiname: string);
var vorhanden: boolean;
begin
Writeln('Start sucheDatei');
zitadellPfad(0);
zitadellPfad(1);
zitadellPfad(2);
zitadellPfad(3);
vorhanden:= false;
if sDateiname <> '' then begin
daten_dateiname:= sDateiname;
if fileExists( daten_dateiname ) then begin
daten_dateilokal:= true;
if not still then Writeln( 'Dateiname: ' + daten_dateiname + ' gefunden' );
vorhanden:= true;
end;
if ( not vorhanden ) and fileExists( addPfad(daten_pfad, daten_dateiname) ) then begin
daten_dateilokal:= false;
if not still then Writeln( 'Dateiname: ' + addPfad(daten_pfad, daten_dateiname)+ ' gefunden' );
vorhanden:= true;
end;
end;
if daten_pfad = '' then Writeln('Nichts gefunden?');
Writeln('Beendet sucheDatei');
end;
procedure testEnv(value: string);
begin
SetEnvZitadell('zitadell','Testwert');
Writeln(GetEnvZitadell('zitadell1'));
end;
begin
end.
Nun wollte ich die Systemvariable auch setzen, in einigen Google-Suchen wie auch von ChatGPT wird angegeben, es gäbe eine
Code: Alles auswählen
SetEnvironmentVariable()
Leider compiliert das nicht und ich finde die Methode auch nicht in der Sysutils-Übersicht. Warum gibt es kein Gegenstück zur
Code: Alles auswählen
GetEnvironmentVariable()
Ich hatte für das Lesen auch erst GetEnv() von Pascal benutzt, ok den (für mich marginalen) Unterschied habe ich gelesen. Allerdings finde ich auch kein SetEnv() oder so. Wie macht man das denn?
Und wenn Ihr ganz lieb seid, schaut Ihr Euch bitte auch noch mal mein Registry-Auslesen an. Das wäre nämlich die nächste Frage - wie schreibe ich den bestimmten Schlüssel in der Registry. Ja ich weiß, selber rumschreiben in der Registry ist gefährlich - aber irgendwie muß man da ja Werte reinbekommen können.
Ich hatte vor Jahren mal eine Programm-Installationsroutine (EasySetup), das hat mir beide Aufgaben (Registry und Umgebungsvariable setzen) erledigt. Leider funktioniert das nicht mehr(?) unter Win7/10/11 und somit hatte ich die Idee, schnell selbst ein Dienstprogramm zu schreiben, was eben das macht. Oder gibt es solche kleinen Programme, Lazarus schreiben wäre natürlich viel besser.