![]() |
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:
Dabei tritt aber immer eine "Invalid variant operation" des Types EVariantInvalidOpError auf.
function GetUserTemplates: string;
begin Result := Word.Options.DefaultFilePath(wdUserTemplatesPath); end; |
|
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. |
Zitat:
|
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