П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;
beginif succeeded(shgetspecialfolderlocation(0, CSIDL_PROGRAMS, pi)) thenbegin
madd('Succeeded programs location');
if succeeded(shgetdesktopfolder(id)) thenbegin
madd('Succeeded get desktop folder');
if succeeded(id.getdisplaynameof(pi, 0, lpname)) thenbegin
madd('Succeeded get display name');
if lpname.uType = 2 thenbegin
madd(lpname.cstr);
end;
endelse
madd('UnSucceeded get display name');
endelse
madd('UnSucceeded get desktop folder');
endelse
madd('UNSucceeded programs location');
end;
Программа на Delphi!
Получить имя папки рабочего стола текущего пользователя без использования реестра можно с помощью функции SHGetDesktopFolder, которая возвращает указатель на интерфейс IShellFolder. Затем можно вызвать метод IGetDisplayName на этом интерфейсе, чтобы получить имя папки.
Вот модифицированная код:
procedureTForm1.Button1Click(Sender:TObject);varppmalloc:IShellFolder;id:IShellFolder;pi:PITEMIDLIST;lpname:TStrRet;beginifSHGetSpecialFolderLocation(0,CSIDL_DESKTOP,pi)thenbeginSHGetDesktopFolder(id);// получить интерфейс папки рабочего столаifid.GetDisplayNameOf(pi,0,lpname)thenbeginMadd(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
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.