Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Получить пути специальных папок

Delphi , Файловая система , Директории

Получить пути специальных папок


{ 
  Constants: 

  CSIDL_DESKTOP 
  CSIDL_INTERNET 
  CSIDL_PROGRAMS 
  CSIDL_CONTROLS 
  CSIDL_PRINTERS 
  CSIDL_PERSONAL 
  CSIDL_FAVORITES 
  CSIDL_STARTUP 
  CSIDL_RECENT 
  CSIDL_SENDTO 
  CSIDL_BITBUCKET 
  CSIDL_STARTMENU 
  CSIDL_DESKTOPDIRECTORY 
  CSIDL_DRIVES 
  CSIDL_NETWORK 
  CSIDL_NETHOOD 
  CSIDL_FONTS 
  CSIDL_TEMPLATES 
  CSIDL_COMMON_STARTMENU 
  CSIDL_COMMON_PROGRAMS 
  CSIDL_COMMON_STARTUP 
  CSIDL_COMMON_DESKTOPDIRECTORY 
  CSIDL_APPDATA 
  CSIDL_PRINTHOOD 
  CSIDL_ALTSTARTUP 
  CSIDL_COMMON_ALTSTARTUP 
  CSIDL_COMMON_FAVORITES 
  CSIDL_INTERNET_CACHE 
  CSIDL_COOKIES 
  CSIDL_HISTORY 
} 

uses 
  ActiveX, ShlObj; 

procedure TForm1.Button1Click(Sender: TObject); 
  // Replace CSIDL_HISTORY with the constants above 
var 
  Allocator: IMalloc; 
  SpecialDir: PItemIdList; 
  FBuf: array[0..MAX_PATH] of Char; 
  PerDir: string; 
begin 
  if SHGetMalloc(Allocator) = NOERROR then 
  begin 
    SHGetSpecialFolderLocation(Form1.Handle, CSIDL_HISTORY, SpecialDir); 
    SHGetPathFromIDList(SpecialDir, @FBuf[0]); 
    Allocator.Free(SpecialDir); 
    ShowMessage(string(FBuf)); 
  end; 
end; 

// With Windows Me/2000, the SHGetSpecialFolderLocation function 
// is superseded by ShGetFolderLocation. 


// function to get the desktop folder location: 

function GetDeskTopPath : string; 
var 
  shellMalloc: IMalloc; 
  ppidl: PItemIdList; 
  PerDir: string; 
begin 
  ppidl := nil; 
  try 
    if SHGetMalloc(shellMalloc) = NOERROR then 
    begin 
      SHGetSpecialFolderLocation(Form1.Handle, CSIDL_DESKTOP, ppidl); 
      SetLength(Result, MAX_PATH); 
      if not SHGetPathFromIDList(ppidl, PChar(Result)) then 
        raise exception.create('SHGetPathFromIDList failed : invalid pidl'); 
      SetLength(Result, lStrLen(PChar(Result))); 
    end; 
  finally 
   if ppidl <> nil then 
         shellMalloc.free(ppidl); 
  end; 
end;

Перевод:

Код, предоставленный в Delphi, используется для получения путей специальных папок на системе Windows.

Процедура Button1Click использует функцию SHGetSpecialFolderLocation для получения пути специальной папки (в этом случае, CSIDL_ HISTORY) и затем отображает путь с помощью ShowMessage.

Функция GetDeskTopPath используется для получения местоположения папки桌а.

Вот как можно улучшить этот код:

  1. Обработка ошибок: текущая обработка ошибок в функции GetDeskTopPath недостаточна. Лучше было бы проверять, возвращает ли SHGetMalloc ошибку перед вызовом SHGetSpecialFolderLocation.
  2. Организация кода: код сейчас организован как одиночная процедура и функция. Было бы более читаемым и поддерживаемым, если логика для получения пути каждой специальной папки была в своей собственной процедуре или функции.
  3. Проверка типа: в Delphi рекомендуется использовать проверку типа для обеспечения того, что переменные имеют правильный тип перед использованием.

Вот пример улучшения функции GetDeskTopPath:

function GetSpecialFolderPath(const FolderID: Integer): string;
var
  shellMalloc: IMalloc;
  ppidl: PItemIdList;
begin
  Result := '';
  ppidl := nil;
  try
    if SHGetMalloc(shellMalloc) = NOERROR then
    begin
      if SHGetSpecialFolderLocation(0, FolderID, ppidl) = S_OK then
      begin
        SetLength(Result, MAX_PATH);
        if not SHGetPathFromIDList(ppidl, PChar(Result)) then
          raise Exception.Create('SHGetPathFromIDList failed: invalid pidl');
        SetLength(Result, lStrLen(PChar(Result)));
      end;
    end;
  finally
    if ppidl <> nil then
      shellMalloc.Free(ppidl);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetSpecialFolderPath(CSIDL_HISTORY));
end;

В этом улучшенном варианте функция GetDeskTopPath переименована в GetSpecialFolderPath, и она принимает параметр идентификатора папки. Обработка ошибок была улучшена, а код стал более организованным и читаемым.

В статье описывается получение путей специальных папок в системе Windows с помощью функции SHGetSpecialFolderLocation и ShGetFolderLocation.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Директории ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-19 02:30:55/0.003392219543457/0