Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Wildcards im Registry Key Path [gelöst] (https://www.delphipraxis.net/123731-wildcards-im-registry-key-path-%5Bgeloest%5D.html)

Bastian Th. 7. Nov 2008 09:23


Wildcards im Registry Key Path [gelöst]
 
Hallo Leute.

Meiner erster Post und gleich unverschämter weise ne Frage :-)

Ich habe ein Konsolenprogramm geschrieben das mir zuerst den aktuellen Pfad in dem das Programm ausgeführt wird ausliest. Anschließend hole ich mir den Inhalt des Key´s Path aus der Registry in eine String Variable. An diese String Variable hänge ich dann ein Semikolon und den ausgelesenen aktuellen Pfad. Jetzt wird der Key Path in der Registry geöffnet und mit dem Inhalt des erweiterten Strings gefüllt.

Das Funktioniert auch alles so weit ganz gut.

Leider werden im Key Path in der Registry aber Wildcards wie %system% und ähnliches verwendet. Mein Programm liest und setzt aber leider die statischen Pfade und nicht die Wildcards. Das ist extrem schlecht.

Wie kann ich es also hinbekommen das er mir die Wildcards mit ausliest und auch wieder so zuückschreibt ????

Ich hänge hier auch nochmal mein Programm an

Code:
program PPath_Variable;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  JCLSYSINFO,
  Registry,
  Windows;

const
name = 'Path' ;

var
dir, path : string;
regist: TRegistry;

begin
dir := GetCurrentDir;
GetEnvironmentVariable(name, path);
path := path+';'+dir;


  regist:=TRegistry.Create;
  try
   regist.RootKey:=HKEY_LOCAL_MACHINE;
   regist.OpenKey('\SYSTEM\ControlSet001\Control\Session Manager\Environment', true);
   regist.WriteExpandString('Path', path);
   regist.CloseKey;
  finally
   regist.free;

end;
end.
Vielen dank schonmal für eure Hilfe

Gruss Bastian

Bastian Th. 7. Nov 2008 11:30

Re: Wildcards im Registry Key Path
 
So !!!

Mitlerweile bin ich selbst auf die Lösung gekommen :-)

Für den, den es interessiert was ich geändert habe, hier nochmal der neue Code

Code:
program PPath_Variable;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  JCLSYSINFO,
  Registry,
  Windows;

const
name = 'Path' ;

var
dir, path : string;
regist: TRegistry;
i : integer ;

begin
dir := GetCurrentDir;

  regist:=TRegistry.Create;
  try
   regist.RootKey:=HKEY_LOCAL_MACHINE;
   regist.OpenKey('\SYSTEM\ControlSet001\Control\Session Manager\Environment', true);
   path := regist.ReadString(name);
   i:= pos(dir, path);
   if i = 0 then
   begin
    path := path+';'+dir;
    regist.WriteExpandString('Path', path);
   end;
   regist.CloseKey;
  finally
   regist.free;
  end;

end.
ALso dann bis bald

Gruss Bastian

Luckie 7. Nov 2008 11:43

Re: Wildcards im Registry Key Path [gelöst]
 
Bist du sicher, dass du das willst:
Delphi-Quellcode:
dir := GetCurrentDir;
GetCurrentDir liefert das aktuelle Arbeitsverzeichnis, welches nicht zwingend das Verzecihnis des Programmes sein muss.

RWarnecke 7. Nov 2008 11:54

Re: Wildcards im Registry Key Path [gelöst]
 
Besser wäre dann
Delphi-Quellcode:
ExtractFilePath(Application.ExeName)

DeddyH 7. Nov 2008 12:25

Re: Wildcards im Registry Key Path [gelöst]
 
In diesem Fall eher
Delphi-Quellcode:
ExtractFilePath(ParamStr(0))
, da er die Unit Forms in einer Konsolenanwendung wohl eher nicht braucht.

Bastian Th. 7. Nov 2008 13:22

Re: Wildcards im Registry Key Path [gelöst]
 
Also ich habe die Compilierte exe mal in verschiedene Pfade kopiert und dann ausgeführt. Als Ergebnis hat er mir bei GetCurrentDir immer das ausgegeben in dem die exe geöffnet wurde.

Wo besteht hier genau das Problem ??


Gruss Bastian

Prototypjack 7. Nov 2008 13:37

Re: Wildcards im Registry Key Path [gelöst]
 
Zitat:

Zitat von Bastian Th.
Also ich habe die Compilierte exe mal in verschiedene Pfade kopiert und dann ausgeführt. Als Ergebnis hat er mir bei GetCurrentDir immer das ausgegeben in dem die exe geöffnet wurde.

Wo besteht hier genau das Problem ??


Gruss Bastian

Ein starten über Verknüpfungen und dergleichen kann diesen Pfad verändern.

Grüße,
Max

DeddyH 7. Nov 2008 14:05

Re: Wildcards im Registry Key Path [gelöst]
 
Kleine Beweisführung: folgendes Projekt
Delphi-Quellcode:
program DirTest;

uses
  SysUtils;

{$APPTYPE CONSOLE}

begin
  writeln('Aktuelles Verzeichnis: ' + GetCurrentDir);
  writeln('Eigenes Verzeichnis: ' + ExtractFilePath(ParamStr(0)));
end.
Kompilieren und die Exe z.B. nach "C:\Programme\Test" kopieren. Dann die Eingabeaufforderung öffnen und nacheinander Folgendes eingeben:
Code:
C:
cd \
programme\test\dirtest
cd programme\test
dirtest


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz