В Windows 7 существуют специальные папки для документов, музыки, изображений и т.д., которые называются библиотеками. Библиотеки могут содержать различные локации (пути), которые фактически являются ярлыками для каждой библиотеки. Например, библиотека "Документы" может содержать пути E:\Personal\Documents и F:\Backups\Documents. При нажатии на папку библиотеки в Проводнике Windows или в меню "Пуск", отображаются все локации, определенные внутри этой библиотеки.
Задача
Необходимо уметь читать локации для каждого типа библиотеки и обновлять библиотеку своими локациями. Библиотеки хранятся в папке пользователя C:\Users\SOMEUSER\AppData\Roaming\Microsoft\Windows\Libraries в файлах типа Library (.library-ms). Эти файлы содержат ассоциированные с библиотекой локации, которые можно просмотреть, кликнув правой кнопкой мыши и выбрав свойства.
Решение
Для работы с библиотеками Windows 7 в Delphi можно использовать функции SHLoadLibraryFrom...(). Например, SHLoadLibraryFromKnownFolder() позволяет получить интерфейс IShellLibrary, с помощью которого можно перечислять и манипулировать локациями библиотеки.
Пример кода
uses
..., ActiveX, KnownFolders, ShlObj;
function My_SHLoadLibraryFromKnownFolder(const kfidLibrary: TGUID; grfMode: DWORD; riid: TIID; out ppv): HRESULT;
var
plib: IShellLibrary;
begin
// ... (реализация функции)
end;
function GetLibraryFileSystemFolders(FolderID: TGUID; Folders: TStrings): Boolean;
var
SL: IShellLibrary;
Arr: IShellItemArray;
Enum: IEnumShellItems;
Item: IShellItem;
Path: LPWSTR;
begin
// ... (реализация функции)
end;
var
Folders: TStringList;
begin
Folders := TStringList.Create;
try
if GetLibraryFileSystemFolders(FOLDERID_DocumentsLibrary, Folders) then
begin
// ... (обработка списка локаций)
end;
finally
Folders.Free;
end;
end;
Дополнительная информация
Для работы с пользовательскими библиотеками, не определенными в Microsoft, необходимо использовать функцию SHLoadLibraryFromItem(). Также существуют другие функции для добавления, удаления и сохранения локаций в библиотеках.
Заключение
Для работы с библиотеками Windows 7 в Delphi необходимо использовать интерфейсы и функции Windows API. Приведенный пример кода демонстрирует, как можно получить список локаций для библиотеки документов. Для более глубокой работы с библиотеками рекомендуется изучить дополнительные функции Windows API, такие как SHAddFolderPathToLibrary, SHCreateLibrary, SHLoadLibraryFromParsingName, SHRemoveFolderPathFromLibrary, SHResolveFolderPathInLibrary, SHResolveLibrary, SHSaveLibraryInFolderPath, SHShowManageLibraryUI.
Этот пример является лишь отправной точкой, и для полноценной работы с библиотеками Windows 7 в Delphi потребуется более глубокое изучение Windows API и его возможностей.
Вам нужно научиться работать с библиотеками Windows 7 в среде разработки Delphi, чтобы уметь читать и обновлять локации этих библиотек.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS