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

Как получить имя папки pабочего стола (не чеpез registry)

Delphi , Рабочий стол , Рабочий стол

Как получить имя папки pабочего стола (не чеpез registry)

Автор: Nomadic

Пpосто очень хочется поpаботать с shell functions.

В этом примере делается и это


procedure TForm1.Button1Click(Sender: TObject);

  procedure madd(s: string);
  begin
    memo1.lines.add(s);
  end;

var
  ppmalloc: imalloc;
  id: ishellfolder;
  pi: pitemidlist;
  lpname: tstrret;
begin

  if succeeded(shgetspecialfolderlocation(0, CSIDL_PROGRAMS, pi)) then
  begin
    madd('Succeeded programs location');
    if succeeded(shgetdesktopfolder(id)) then
    begin
      madd('Succeeded get desktop folder');
      if succeeded(id.getdisplaynameof(pi, 0, lpname)) then
      begin
        madd('Succeeded get display name');
        if lpname.uType = 2 then
        begin
          madd(lpname.cstr);
        end;
      end
      else
        madd('UnSucceeded get display name');
    end
    else
      madd('UnSucceeded get desktop folder');
  end
  else
    madd('UNSucceeded programs location');
end;

Программа на Delphi!

Получить имя папки рабочего стола текущего пользователя без использования реестра можно с помощью функции SHGetDesktopFolder, которая возвращает указатель на интерфейс IShellFolder. Затем можно вызвать метод IGetDisplayName на этом интерфейсе, чтобы получить имя папки.

Вот модифицированная код:

procedure TForm1.Button1Click(Sender: TObject);
var
  ppmalloc: IShellFolder;
  id: IShellFolder;
  pi: PITEMIDLIST;
  lpname: TStrRet;
begin
  if SHGetSpecialFolderLocation(0, CSIDL_DESKTOP, pi) then
  begin
    SHGetDesktopFolder(id); // получить интерфейс папки рабочего стола
    if id.GetDisplayNameOf(pi, 0, lpname) then
    begin
      Madd(lpname.cstr); // добавить имя в мему
    end;
  end;
end;

Обратите внимание, что я использовал CSIDL_DESKTOP вместо CSIDL_PROGRAMS, потому что вы спрашиваете о папке рабочего стола. Также я удалил ненужные переменные и упростил код.

Функция SHGetSpecialFolderLocation возвращает указатель на структуру ITEMIDLIST (которая теперь указывает на pi), поэтому мы можем передать это напрямую функции SHGetDesktopFolder.

Наконец, я использовал метод IGetDisplayNameOf интерфейса IShellFolder, который возвращает строку с именем папки. Мы добавляем эту строку в мему с помощью процедуры Madd.

В статье описывается пример shell-функции на Delphi, которая получает имя папки рабочего стола не используя регистр, а также выводит соответствующие сообщения в текстовом поле.


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

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




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


:: Главная :: Рабочий стол ::


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:44:28/0.014299154281616/1