Библиотека Windows 7 Libraries .NET Sample Library (ч.3)
Итак, теперь вы знаете, что такое библиотеки, для чего они предназначены и как их наличие помогает пользователям и разработчикам. Это третья по счету статья в серии статей, посвященных библиотекам. В
Начнём с обзора предшественников библиотек Windows 7. Windows Vista обеспечивала новый способ хранения пользовательских данных и новые пространства имён в пользовательском профиле, известные как "
Оба варианта, CSIDL и Known Folders, включают поддержку специальных типов пользовательского содержимого: Документы, Музыка, Изображения и Видео, — эти папки являются частью профиля каждого пользователя. Библиотеки Windows 7 расширяют Known Folders каждого пользователя, например, папку документов, до библиотеки документов. Если вы посмотрите на
- Личные папки пользователя, отсортированные по типу (документы, изображения и т.д.) представленные по умолчанию папками Known Folder, которые включены в состав библиотек и хранятся в определяемом по умолчанию месте.
- Папки общего доступа, отсортированные по типу
Для библиотек, создаваемых пользователем, этим местом хранения будет первая добавленная в библиотеку папка.
В каком-то смысле библиотека похожа на обычную папку. С пользовательской точки зрения библиотека выглядит и ведёт себя как папка. Но, в отличии от папки, библиотека собирает файлы, разбросанные по иным местам хранения, и представляет их в одном месте. Это небольшое, но очень важное отличие. Библиотеки не хранят пользовательские данные, они лишь наблюдают за папками с объектами и предоставляют пользователю доступ к ним, организуя их разными способами. Они также предоставляют пользователям и авторам программ доступ к списку папок и их содержимому. Например, вы пытаетесь сохранить текстовый документ из Notepad прямиком в библиотеку документов, но файл сохранён не будет. Что же произойдёт в таком случае? Текстовый документ будет сохранён в определённое по умолчанию место сохранения файлов для библиотеки документов, которым, опять же по умолчанию, является папка с документами, известная также, как папка "Мои Документы", и являющаяся элементом пользовательского профиля. Пользователь полностью контролирует это определённое по умолчанию место сохранения файлов так же, как и все остальные места, являющиеся частями библиотеки. Как показано на рисунке ниже, диалог управления библиотекой изображений (доступный прямо из пользовательского интерфейса Windows Explorer) содержит несколько папок на локальном жёстком диске моего ПК с одной из папок, определённых в качестве места хранения по умолчанию.
Диалог управления библиотекой
Важно знать, что библиотека документов не подменяет папку "Мои Документы" в Windows Vista. Она включает в себя эту папку как одно из мест хранения в библиотеке изображений. Имейте ввиду, что система CSIDL и её API поддерживаются из соображений сохранения совместимости. Однако мы не рекомендуем использовать их при создании новых программ. Предпочтительно использовать систему Known Folders.
Библиотеки в Windows 7 представляют собой XML-файлы с расширением ".library-ms". Имя файла — это имя библиотеки. Например, библиотека документов представлена файлом Documents.library-ms. Описания библиотек сохраняются в папке %appdata% RoamingMicrosoftWindowsLibraries (также известной как
Давайте углубимся в архитектуру библиотеки документов. Структура XML говорит сама за себя, но всё же необходимо пояснить некоторые элементы. Наверху располагается "заголовок", как мы его называем, с информацией:
<libraryDescription xmlns="http://schemas.microsoft.com/windows/2009/library">
<name>@shell32.dll,-34575</name>
<ownerSID>S-1-5-21-2127521184-1604012920-1887927527-4897363</ownerSID>
<version>4</version>
<isLibraryPinned>true</isLibraryPinned>
<iconReference>imageres.dll,-1002</iconReference>
<templateInfo>
<folderType>{7D49D726-3C21-4F05-99AA-FDC2C9474656}</folderType>
</templateInfo>
Корневой XML-элемент — libraryDescription, содержащий дочерние элементы, определяющие библиотеку:
- <ownerSID> — элемент, определяющий идентификатор безопасности пользователя, создавшего библиотеку, чтобы изолировать библиотеку и защитить данные пользователя от несанкционированного доступа
- <isLibraryPinned> — булева переменная, определяющая, прикреплен ли ярлык библиотеки к левой панели Windows Explorer, но не к панели задач
- <version> — определяет версию содержимого библиотеки, отражающий число изменений файла определения библиотеки
- <templateInfo> — необязательный контейнерный элемент, позволяющий автору указывать тип папки (документы, изображения и т.д.) для контроля организации представлений в Windows Explorer
- <iconReference> определяет файл, из которого берутся изображения для ярлыков, используя стандартный стиль Windows Shell; например, <iconReference> C:Windowssystem32imageres.dll,-65 </iconReference>. Эта иконка представляет библиотеку
Пользователь не может поменять иконку библиотеки по умолчанию с помощью Windows Explorer и не может ассоциировать иконку с определённой пользователем библиотекой. Это можно сделать программно с помощью API. Но об этом в одной из следующей статей.
Ключевая часть XML — список мест хранения, представленных через библиотеку:
<searchConnectorDescriptionList>
<searchConnectorDescription publisher="Microsoft" product="Windows">
<description>@shell32.dll,-34577</description>
<isDefaultSaveLocation>true</isDefaultSaveLocation>
<isSupported>true</isSupported>
<simpleLocation>
<url>knownfolder:{FDD39AD0-238F-46AF-ADB4-6C85480369C7}</url>
<serialized>MBAAAE…. </serialized>
</simpleLocation>
</searchConnectorDescription>
- <searchConnectorDescriptionList> — содержит одну или больше поисковых меток, прикреплённых к действительным местам хранения, включённым в библиотеку
- <searchConnectorDescription> содержит элемент <simpleLocation> описывающий место хранения, включённое в библиотеку
- <url> определяет URL этого места хранения и предназначен для облегчения интерпретации человеком, разработчиками использоваться не может, поскольку по большей части эта информация быстро устаревает
- <serialized> — это актуальное представление (Base64) места хранения, являющееся серийным объектом ShellLink
И еще однозамечание: программы ни в коем случае не должны открывать или изменять файлы описания библиотек. Вместо этого программам всегда следует использовать Shell-модель программирования или IShellLibrary API для использования и управления содержимым библиотек. Ну а в следующей статье мы рассмотрим Shell-модель программирования.
Источник:
Перевод: Galaxer
По теме
- Федеративный поиск в 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)