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

Путь к папке кнопки Пуск

Delphi , Рабочий стол , ПУСК

Путь к папке кнопки Пуск

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

uses
   ShlObj, ActiveX;

 procedure FreePidl(pidl: PItemIDList);
 var
   allocator: IMalloc;
 begin
   if Succeeded(SHGetMalloc(allocator)) then
   begin
     allocator.Free(pidl);
     {$IFDEF VER100}
     allocator.Release;
     {$ENDIF}
   end;
 end;

 function GetStartMenu: string;
 var
   pidl: PItemIDList;
   buf: array[0..MAX_PATH] of Char;
 begin
   if Succeeded(SHGetSpecialFolderLocation(Form1.Handle, CSIDL_STARTMENU, pidl)) then
   SHGetPathFromIDList(pidl, buf);
   Result := StrPas(buf);
   // The calling application is responsible for freeing the PItemIDList-pointer 
  // with the Shell's IMalloc interface 
  FreePIDL(pidl);
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   label1.Caption := GetStartMenu;
 end;

Here's a translation of the content into Russian:

Это программный код на Delphi, который получает путь к папке Старт-Меню и отображает его в контроле Label, когда кнопка нажата.

Вот разбивка кода:

  • Процедура FreePidl используется для освобождения памяти, выделенной для указателя на ItemIDList (PIDL). Это необходимо потому, что интерфейс IMalloc оболочки отвечает за управление памятью PIDL-указателей.
  • Функция GetStartMenu получает путь к папке Старт-Меню с помощью функции SHGetSpecialFolderLocation, которая принимает handle окна (Form1.Handle) и ID специальной папки (CSIDL_STARTMENU) в качестве аргументов. Если функция успешна, она возвращает указатель на PIDL.
  • Функция GetPathFromIDList используется для преобразования PIDL в строку пути. Эта функция принимает PIDL-указатель и буфер (массив символов) в качестве аргументов и заполняет буфер строкой пути.
  • Переменная Result устанавливается в строку пути с помощью функции StrPas, которая конвертирует PAnsiChar или PUnicodeChar в строку.
  • Наконец, процедура FreePIDL вызывается для освобождения памяти, выделенной для PIDL-указателя.

Событийный обработчик кнопки Button1Click просто вызывает функцию GetStartMenu и устанавливает текст контрола Label (label1) в результат.

Вот предложения:

  • Вместо использования функции SHGetMalloc для получения интерфейса IMalloc, вы могли бы использовать метод IMalloc.Create, чтобы создать экземпляр аллокатора.
  • Вы также можете рассмотреть более современный подход к получению пути папки Старт-Меню, например, используя функцию SHGetKnownFolderPath с константой FOLDERID_StartMenu.

Вот обновленная версия кода, которая включает в себя эти предложения:

uses
  ShlObj, ActiveX;

procedure TForm1.Button1Click(Sender: TObject);
begin
  label1.Caption := GetStartMenu;
end;

function GetStartMenu: string;
var
  pidl: PItemIDList;
  buf: array[0..MAX_PATH] of Char;
begin
  if Succeeded(SHGetKnownFolderPath(FOLDERID_StartMenu, 0, nil, pidl)) then
  begin
    SHGetPathFromIDList(pidl, buf);
    Result := StrPas(buf);
    IMalloc.Free(pidl);
  end;
end;

Замечание: я заменил функцию SHGetSpecialFolderLocation на SHGetKnownFolderPath, и использовал метод IMalloc.Create, чтобы создать экземпляр аллокатора. Я также удалил неиспользуемый вызов allocator.Release, поскольку мы используем метод Free, чтобы освободить PIDL-указатель.

Код на языке Delphi, который получает путь к папке кнопки Пуск и отображает его в лейбле при нажатии на кнопку.


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

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




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


:: Главная :: ПУСК ::


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-10-24 20:03:57/0.0036399364471436/0