Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
После двухнедельного перерыва мы возвращаемся к нашим техническим статьям о библиотеках Windows 7. Это шестая по счету статья о библиотеках Windows 7. На данный момент вы должны быть знакомы с библиотеками Windows 7 и понимать их внутреннюю структуру и то, как они встраиваются в оболочку Windows. Вы знакомы с различными доступными моделями программирования, а также знаете, как использовать программируемые интерфейсы Windows Shell для работы с содержимым библиотек. В этой статьей мы рассмотрим вспомогательные функции библиотек Windows 7.
COM-объект IShellLibrary представляет библиотеки Windows 7. Этот интерфейс определяет методы создания и управления библиотеками. Вы можете работать непосредственно с COM-интерфейсом, но проще использовать более высокий уровень абстракции функций. Shobjidl.h предоставляет следующие вспомогательные функции библиотеки:
- SHAddFolderPathToLibrary – добавляет папку в библиотеку
- SHCreateLibrary – создает объект IShellLibrary
- SHLoadLibraryFromItem – создает и считывает объектIShellLibrary из указанного файла определения библиотеки
- SHLoadLibraryFromKnownFolder – создает и считывает объект IshellLibrary для указанного KNOWNFOLDERID
- SHLoadLibraryFromParsingName – создает и считывает объект IshellLibrary для указанного пути
- SHRemoveFolderPathFromLibrary – удаляет папку из библиотеки
- SHResolveFolderPathInLibrary – пытается восстановить месторасположение папки библиотеки, которая была перемещена или переименована
- SHSaveLibraryInFolderPath – сохраняет объект IShellLibrary на диск
Примечание: Если вам интересно, как реализованы эти вспомогательные функции, просто откройте файл Shobjudl.h и поищите их там.
Используя эти вспомогательные функции, вы можете выполнить большинство операций управления без использования низкоуровневых API. Например, вы можете добавить папку в библиотеку используя SHAddFolderPathToLibrary, не вызывая ISHellLibrary::Commit() . Поскольку IShellLibrary является программируемым интерфейсом, основанным на COM, вам понадобится вызвать функцию CoInitialize. После вам необходимо использовать вспомогательные функции. Нижеприведенный фрагмент кода создает новую библиотеку, добавляет в нее папку и сохраняет файл определения библиотеки в папку библиотеки.
IShellLibrary *pLib;
IShellItem *pSi;
SHCreateLibrary(IID_PPV_ARGS(&pLib));
SHAddFolderPathToLibrary( pLib, L"C:\\temp ");
pLib ->SaveInKnownFolder(
FOLDERID_Libraries,
L"Test 1 Lib",
LSF_MAKEUNIQUENAME,
& pSi);
Вспомогательные функции не предоставляют всех возможностей интерфейса IShellLibrary. Работая напрямую с интерфейсом IShellLibrary, вы можете вывести или установить иконку библиотеки, используя GetIcon и SetIcon. Но куда более важно, что вы можете получить содержимое библиотеки, используя IShellLibrary:: GetFolders() , как то показано во фрагменте кода ниже.
IShellLibrary *pslLibrary;
SHLoadLibraryFromKnownFolder(
FOLDERID_PicturesLibrary,
STGM_READ,
IID_PPV_ARGS(&pslLibrary));
IShellItemArray *psiaFolders;
pslLibrary->GetFolders(
LFF_FORCEFILESYSTEM,
IID_PPV_ARGS(&psiaFolders));
В следующей статьей мы пройдемся по некоторым методам синхронизации содержимого библиотек.
Comments
Anonymous
May 14, 2009
PingBack from http://www.anith.com/?p=37870Anonymous
May 24, 2009
И вот новая статья из серии, посвященной библиотеках Windows 7. На текущий момент мы уже рассмотрели,Anonymous
June 11, 2009
Вот и подошло к концу наше продолжительное погружение в программные интерфейсы библиотек Windows 7 и