Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wie lese ich Werte des Typs REG_EXPAND_SZ aus der Registry? (https://www.delphipraxis.net/4536-wie-lese-ich-werte-des-typs-reg_expand_sz-aus-der-registry.html)

[TP]Hawk274 3. Mai 2003 16:32


Wie lese ich Werte des Typs REG_EXPAND_SZ aus der Registry?
 
Ich möchte gerne den Vorlagenpfad von Word Dokumenten auslesen. Dieser Wert wird aber als REG_EXPAND_SZ gespeichert. Wie kann man diesen auslesen?
Der Vorlagenpfad in Word wird im folgenden Eintrag gespeichert:
Code:
Root: HKEY_CURRENT_USER
Key: '\Software\Microsoft\Office\10.0\Common\General\'
RegName: 'UserTemplates'

Wobei 10.0 durch die jeweilige Office Version ersetzt werden muss.

Habe es schon probiert über Ole auszulesen. Der Befehlt dafür lautet:
Code:
function GetUserTemplates: string;
begin
  Result := Word.Options.DefaultFilePath(wdUserTemplatesPath);
end;
Dabei tritt aber immer eine "Invalid variant operation" des Types EVariantInvalidOpError auf.

toms 3. Mai 2003 16:36

Einfach mal da schauen:

http://snurl.com/1a4k

Christian Seehase 3. Mai 2003 17:30

Moin Hawk,

das kannst Du problemlos mit der Methode ReadString von TRegistry auslesen, und dann mit ExpandEnvironmentStrings die, eventuell, im ausgelesenen Wert enthaltenen Environmentstrings durch ihre Werte ersetzten.

[TP]Hawk274 4. Mai 2003 11:41

Zitat:

dann mit ExpandEnvironmentStrings die, eventuell, im ausgelesenen Wert enthaltenen Environmentstrings durch ihre Werte ersetzten
Hey, danke für den Tipp. Aber leider ist das Windows API. Habe damit noch nicht so viel am Hut. Kannst du mir vielleicht mal ein Beispiel geben? Habe auch noch keine Erfahrung mit Pointer in Delphi. Wenn ich die Hilfe richtig verstanden ist müsste man PChar übergeben? Der letzte Parameter muss bestimmt mit der Funktion Length ermitteln?

Christian Seehase 4. Mai 2003 12:31

Moin Hawk,

die Übung kommt schon mit der Zeit.

Delphi-Quellcode:
var
  sIN   : string;
  sOUT  : string;
  dwSize : DWORD;

begin
  // Zum Testen ein String mit zwei Umgebungsvariablen
  sIN   := '%userprofile%\test\%systemroot%';
  // Ein kleiner "Trick" um die erforderliche Buffergrösse zu ermitteln:
  // Die Länge des Buffers wird mit 0 angegeben, so dass die Funktion
  // die erforderlichen Buffergrösse zurückmeldet
  // WICHTIG: Dieser "Trick" funktioniert nicht bei allen APIs, die
  // eine Buffergrössenangabe benötigen. Bei manchen ist es hingegen
  // sogar so dokumentiert.
  dwSize := 0;
  dwSize := ExpandEnvironmentStrings(PChar(sIN),@sOUT[1],dwSize);
  // Jetzt den Buffer initialisieren...
  sOUT  := StringOfChar(#00,dwSize);
  // und den String umwandeln
  ExpandEnvironmentStrings(PChar(sIN),@sOUT[1],dwSize);
  ShowMessage(trim(sOUT));
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:13 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