Type TSystemPath=(Desktop,StartMenu,Programs,Startup,Personal, winroot, winsys);
...
Function GetSystemPath(SystemPath:TSystemPath):string;
var p:pchar;
begin
with TRegistry.Create do
try
RootKey := HKEY_CURRENT_USER;
OpenKey('\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders', True);
case SystemPath of
Desktop: Result:=ReadString('Desktop');
StartMenu:Result:=ReadString('Start Menu');
Programs:Result:=ReadString('Programs');
Startup:Result:=ReadString('Startup');
Personal:Result:=ReadString('Personal');
Winroot:begin
GetMem(p,255);
GetWindowsDirectory(p,254);
result:=Strpas(p);
Freemem(p);
end;
WinSys:begin
GetMem(p,255);
GetSystemDirectory(p,254);
result:=Strpas(p);
Freemem(p);
end;
end;
finally
CloseKey;
free;
end;
if (result<>'') and (result[length(result)]<>'\') then result:=result+'\';
end;
Приведенный код на Delphi используется для извлечения системных путей в Windows.
Для поиска системных папок в Windows можно использовать следующие регистровые ключи:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders - Этот ключ содержит подключки для каждого shell-каталога.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders - Этот ключ содержит системно-общие shell-каталоги.
Приведенный код использует первый регистровой ключ для извлечения путей следующих системных папок:
Desktop
Start Menu
Programs
Startup
Personal
Кроме того, он извлекает путь к директории Windows с помощью GetWindowsDirectory и директорию System с помощью GetSystemDirectory.
Вот как использовать этот код:
Создайте новый проект Delphi.
Добавьте следующие единицы в ваше заявление использования:
Registry
ShlObj
Скопируйте предоставленный код в ваш проект.
Позвоните функцию GetSystemPath, передавая один из констант системного пути как аргумент:
Пример:
varPath:string;beginPath:=GetSystemPath(Desktop);ShowMessage(Path);// Отображает путь к папке Desktop.end;
Помните, что вам нужно обрабатывать любые потенциальные ошибки, которые могут возникнуть при чтении из или записи в регистр.
Замечание: Приведенный код использует регистровой ключ HKEY_CURRENT_USER, что означает, что он будет извлекать пути, специфические для текущего пользователя. Если вы хотите получить системно-общие shell-каталоги, используйте HKEY_LOCAL_MACHINE вместо.
В статье описывается способ найти системные папки Windows, используя функцию GetSystemPath из Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.