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

Получить пути папок в Моем Компьютере

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

Получить пути папок в Моем Компьютере

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

uses
   ActiveX, ShlObj;

    procedure TForm1.Button1Click(Sender: TObject);
 var
   pShell, ShellFolder: IShellFolder;
   pidl: PITEMIDLIST;
   PMalloc: IMalloc;
   sName: string;
   EnumIDList: IEnumIDList;
   pceltFetched: ULONG;
   lpName: TStrRet;
   slDirectories: TStringList;
 begin
   slDirectories := TStringList.Create;
   try
     SHGetDesktopFolder(ShellFolder);
     SHGetSpecialFolderLocation(0,CSIDL_DRIVES, pidl);
     SHGetMalloc(PMalloc);
     ShellFolder.BindToObject(pidl, nil, IID_IShellFolder, Pointer(pShell));
     pShell.EnumObjects(0,SHCONTF_FOLDERS, EnumIDList);
     while EnumIDList.Next(1,pidl, pceltFetched) = S_ok do
     begin
       pceltFetched := 0;
       lpName.uType := 0;
       pShell.GetDisplayNameOf(pidl, SHGDN_FORPARSING, lpName);
       sName := lpName.pOleStr;
       slDirectories.Add(sName);
     end;
     ListBox1.Items.Assign(sldirectories);
   finally
     pMalloc._Release;
     pMalloc := nil;
     slDirectories.Free;
   end;

Here is the translation of the content into Russian:

Делфи-программирование задачи!

Код предназначен для извлечения путей папок на вашем компьютере и отображения их в компоненте TListBox с именем ListBox1. Вот разбивка того, что код делает:

  1. Он инициализирует некоторые переменные:
    • pShell: интерфейс к папке shell.
    • ShellFolder: интерфейс к папке desktop shell.
    • pidl: указатель на список идентификаторов элемента (список идентификаторов папок).
    • PMalloc: интерфейс к аллокатору памяти.
    • sName: строковая переменная для хранения имени папки.
    • EnumIDList: интерфейс для перечисления идентификаторов папок.
    • pceltFetched: ULONG-переменная для отслеживания количества элементов, полученных.
    • lpName: структура для хранения имени папки.
  2. Затем код вызывает некоторые функции shell:
    • SHGetDesktopFolder получает папку desktop shell.
    • SHGetSpecialFolderLocation извлекает папку дисков (CSIDL_ DRIVES) и хранит ее ID в pidl.
    • SHGetMalloc получает интерфейс аллокатора памяти.
  3. Код затем привязывается к папке дисков с помощью ShellFolder.BindToObject.
  4. Он перечисляет папки в папке дисков с помощью EnumObjects с флагом SHCONTF_ FOLDERS.
  5. Пока есть еще элементы для перечисления, он:
    • Получает следующий элемент списка идентификаторов (метод Next).
    • Вызывает GetDisplayNameOf, чтобы получить имя папки.
    • Присваивает имя папки переменной sName.
    • Добавляет путь папки в список строк TStringList, называемый slDirectories.
  6. Наконец, код присваивает содержимое slDirectories свойству Items компонента ListBox1.

Код использует некоторые компоненты и интерфейсы Delphi, такие как T ListBox, TStringList, IshellFolder и IMalloc. Функции SHGet* являются частью Microsoft Shell API.

Альтернативное решение - использовать компонент TShellFolders в Delphi для достижения схожих результатов. Этот компонент предоставляет более удобный способ доступа к папкам shell и их содержимому. Например:

procedure TForm1.Button1Click(Sender: TObject);
begin
  with TShellFolders.Create do
  try
    for I := 0 to FolderCount - 1 do
    begin
      FolderItem := GetFolder(I);
      if FolderItem <> nil then
        ListBox1.Items.Add(FolderItem.Path);
    end;
  finally
    Free;
  end;
end;

Код создает экземпляр TShellFolders, перечисляет папки с помощью его метода GetFolder и добавляет путь каждой папки в список элементов ListBox1.

Получение путей папок на компьютере с помощью процедуры TForm1.Button1Click(Sender: TObject) в Delphi, которая использует ActiveX и интерфейсы IShellFolder и IMalloc.


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

Получайте свежие новости и обновления по 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 01:51:07/0.0033459663391113/0