Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Windows API / MS.NET Framework API (https://www.delphipraxis.net/20-library-windows-api-ms-net-framework-api/)
-   -   Delphi Desktop-Pfad ermitteln (https://www.delphipraxis.net/3381-desktop-pfad-ermitteln.html)

thomasdrewermann 9. Mär 2003 17:35


Desktop-Pfad ermitteln
 
Diese Funktion muss in den Quellcode eingefügt werden:
Delphi-Quellcode:
function ReadStringFromRegAPI(const p_sSubKey : string; const p_sValueName : string;var p_sResult : string) : integer;

var
  hResult      : HKEY;
  dwMaxValueLen : DWORD;
  szResult     : PChar;

begin
  Result := RegOpenKeyEx(HKEY_CURRENT_USER,PChar(p_sSubKey),0,KEY_ALL_ACCESS,hResult);
  if Result <> ERROR_SUCCESS then
  begin
    exit;
  end;
  try
    Result := RegQueryInfoKey(hResult,nil,nil,nil,nil,nil,nil,nil,nil,@dwMaxValueLen,nil,nil);
    if Result <> ERROR_SUCCESS then
    begin
      exit;
    end;
    inc(dwMaxValueLen);
    szResult := StrAlloc(dwMaxValueLen);
    try
      Result := RegQueryValueEx(hResult,PChar(p_sValueName),nil,nil,PByte(szResult),@dwMaxValueLen);
      if Result <> ERROR_SUCCESS then
      begin
        exit;
      end;
      p_sResult := trim(szResult);
    finally
      StrDispose(szResult);
    end;
  finally
    RegCloseKey(hResult);
  end;
end;
So muss die Ereignis-Prozedur aussehen (Ausgabe des Pfades in einer Messagebox):
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);

var
  iResult : integer;
  sResult : string;

begin
    iResult := ReadStringFromRegAPI('Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders','Desktop',sResult);
  if iResult <> ERROR_SUCCESS then
  begin
    ShowMessage(SysErrorMessage(iResult));
  end
  else
  begin
    ShowMessage(sResult);
  end;
end;

d3g 22. Mär 2003 10:38

Hallo Thomas,

leider muss ich sagen: das ist eine schlechte Idee. Microsoft selbst schreibt, dass man die Pfade nicht aus der Registry auslesen darf, weil sich die Orte, an denen sie stehen, möglicherweise in künftigen Windows-Versionen ändern. Dann dürfte man ein großen Problem haben. Anstelle der Registry-Pfade soll man die Funktion SHGetSpecialFolderLocation() benutzen (wie man das macht, habe ich hier beschrieben).

MfG,
d3g


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