Библиотека Windows 7 Libraries .NET Sample Library (ч.6)
После двухнедельного перерыва мы возвращаемся к нашим техническим статьям о библиотеках Windows 7. Это шестая по счету статья о библиотеках 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));
В следующей статьей мы пройдемся по некоторым методам синхронизации содержимого библиотек.
Источник:
Перевод: Sibiryak
По теме
- Федеративный поиск в Windows 7
- Программируем панель задач Windows 7: панель миниатюр
- Использование сенсоров в приложении: реализация в managed-коде (ч.1)
- Использование сенсоров в приложении: реализация в native-коде (ч.1)
- Я тебя чувствую: использование платформы Sensor в Windows 7
- Доступны записи с Windows 7 PDC Boot Camp
- Fishbowl для Facebook с использованием новой панели задач Windows 7
- Программируем для Windows 7 в Visual Studio 2010
- Новая версия Windows API Code Pack
- Программирование служб Windows 7 с триггерами (ч.2)