Опрос
Вы участвуете в программе Windows Insider?
Популярные новости
Обсуждаемые новости

20.05.2009 11:15 | Sibiryak

После двухнедельного перерыва мы возвращаемся к нашим техническим статьям о библиотеках 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));


В следующей статьей мы пройдемся по некоторым методам синхронизации содержимого библиотек.


Источник: http://blogs.msdn.com/windev
Перевод: Sibiryak

Комментарии

Комментариев нет...
Для возможности комментировать войдите в 1 клик через

По теме

Акции MSFT
420.55 0.00
Акции торгуются с 17:30 до 00:00 по Москве
Все права принадлежат © ms insider @thevista.ru, 2022
Сайт является источником уникальной информации о семействе операционных систем Windows и других продуктах Microsoft. Перепечатка материалов возможна только с разрешения редакции.
Работает на WMS 2.34 (Страница создана за 1.022 секунд (Общее время SQL: 0.999 секунд - SQL запросов: 53 - Среднее время SQL: 0.01885 секунд))
Top.Mail.Ru