Как найти системные папки Windows?

Материал из DRKB

Как найти системные папки Windows?[править | править код]

type
  TSystemPath = (Desktop, StartMenu, Programs, Startup, Personal, Winroot, WinSys);

implementation

function GetSystemPath(SystemPath: TSystemPath): string;
var
  p: PChar;
begin
  with TRegistry.Create do
  begin
    try
      RootKey := HKEY_CURRENT_USER;
      OpenKey('\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders', True);
      case SystemPath of
        Desktop: Result := ReadString('Desktop');
        StartMenu: Result := ReadString('Start Menu');
        Programs: Result := ReadString('Programs');
        Startup: Result := ReadString('Startup');
        Personal: Result := ReadString('Personal');
        Winroot:
        begin
          GetMem(p, 255);
          GetWindowsDirectory(p, 254);
          Result := StrPas(p);
          Freemem(p);
        end;
        WinSys:
        begin
          GetMem(p, 255);
          GetSystemDirectory(p, 254);
          Result := StrPas(p);
          Freemem(p);
        end;
      end;
    finally
      CloseKey();
      Free();
    end;
  end;
  if (Result <> '') and (Result[Length(Result)] <> '\') then
    Result := Result + '\';
end;


Author: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 01658



uses Registry;

procedure TForm1.Button1Click(Sender: TObject);
var
  reg: TRegistry;
  ts: TStrings;
  i: Integer;
begin
  reg := TRegistry.Create;
  reg.RootKey := HKEY_CURRENT_USER;
  reg.LazyWrite := False;
  reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\ShellFolders', False);
  ts := TStringList.Create;
  reg.GetValueNames(ts);
  for i := 0 to ts.Count -1 do
    Memo1.Lines.Add(ts.Strings[i] + ' = ' + reg.ReadString(ts.Strings[i]));
  ts.Free;
  reg.CloseKey;
  reg.Free;
end;


Source: Взято с http://delphiworld.narod.ru