Статьи / Программирование / Windows 7 Libraries и API / Библиотека Windows 7 Libraries .NET Sample Library (ч.7)
Библиотека Windows 7 Libraries .NET Sample Library (ч.7)Просмотров: 1591
20.06.2009 21:08
 
И вот новая статья из серии статей о библиотеках Windows 7. На текущий момент мы уже рассмотрели, чем являются библиотеки Windows, какова их внутренняя структура и то, как они встраиваются в оболочку Windows. Вы знакомы с различными моделями программирования, из которых можете выбирать, и знаете, как использовать API Windows Shell для работы с содержимым библиотек. В предыдущей статье мы сконцентрировались на вспомогательных функциях библиотек Windows 7. В этой статье мы изучим, как синхронизировать библиотеки.

До Windows 7 и появления библиотек вы хранили ваши музыкальные файлы в папке Моя музыка. До Windows 7 когда вы ходили воспроизвести музыку в Windows Media Player, вам приходилось вручную указывать Windows Media Player нужную музыкальную папку и выбирать композицию. Если вы перемещали песню из папки, Windows Media Player не знал, что файл перемещен. Музыкальный файл по-прежнему отображался в списке воспроизведения, но когда приходило время воспроизвести композицию, перед вами появлялось надоедливое сообщение о том, что Windows Media Player не может найти указанный файл - все потому, что Windows Media Player не был синхронизирован с папкой Моя музыка. При таком раскладе Windows Media Player должен поддерживать собственную базу данных песен и локаций, а пользователь должен обновлять эту базу вручную.

С библиотеками Windows 7 такая ошибка куда меняя вероятна. Вы можете спросить почему? Что же, ответ очень прост. Windows Media Player, включенный в состав Windows 7, не поддерживает никакой внутренней базы данных песен, он полностью полагается на библиотеки Музыка, Видео и Изображения в Windows 7 и полностью синхронизирован с этими библиотеками. Это означает, что когда вы удаляете композицию из библиотеки Музыка, она более не будет представлена в списке воспроизведения Windows Media Player. Нижеприведенное изображение показывает, как, щелкнув правой кнопкой мыши на вкладку Music, вы можете управлять соответствующей библиотекой.


Поддерживая синхронизацию
Может потребоваться, чтобы ваше приложение распознавало, когда пользователь вносит изменения в описание библиотеки, добавляет или удаляет оттуда папки или обновляет какие-либо папки, входящие в библиотеку. Есть несколько способов синхронизации в зависимости от требований вашего приложения. В большинстве приложений следует использовать Shell Programming Model с SHChangeNotifyRegister для всех процессов, не являющихся службами.

Использование Shell Programming Model
Для определения изменений элементов в библиотеке средствами Shell Programming Model используйте SHChangeNotifyRegister для отслеживания изменений элементов во всех папка библиотеки. SHChangeNotifyRegister может принять один элемент библиотеки, например, библиотеку Музыка, как параметр для получения уведомлений о всем содержимом библиотеки. В таком случае приложение будет уведомлено обо ВСЕХ изменениях в статусе любых элементов в библиотеке Музыка. К тому же, регистрация библиотеки позволит вашему приложению получать уведомления на лету, так что библиотеки обновляются сразу после внесения изменений в библиотеку. Пользователь также может изменять папки, включаемые в библиотеку, без использования IShellLibrary API. Для этого, чтобы определить изменения в папках, включенных в библиотеку, вам необходимо вызывать SHResolveLibrary каждый раз, когда загружается библиотека. Это сохраняет изменения в папке или имени папки в файле описания библиотеки. Если пользователь добавляет, удаляет или переупорядочивает папки, используя окно управления библиотекой или интерфейсом ISHellLibrary, эти изменения будут сохранены непосредственно в файле .library-ms. Используя эту информацию, клиентское приложение может затем пересчитать папки библиотеки.

Знакомое окно управления библиотекой
И вот последняя составляющая часть библиотек Windows 7. Для соответствия между компонентами Windows и элементами управления содержимым в состав Windows 7 входит общее диалоговое окно управления библиотекой для использования в ваших приложениях. Если ваше приложение нуждается в управлении папками библиотеки, наподобие папки Музыка, запрос диалогового окна управления библиотекой (SHShowManageLibraryUI) предоставит последовательный пользовательский интерфейс Windows Explorer для управления библиотеками. Если вы решите использовать этот интерфейс, он будет вносить изменения в библиотеку напрямую - как если бы напрямую изменял содержимое библиотеки Windows Explorer. Заметьте, что это диалоговое окно не возвращает никакой информации вашему приложению; если вы выводите содержимое библиотеки непосредственно в своем приложении, вам понадобится получить уведомления непосредственно из Shell, как описано выше.


По умолчанию диалоговое окно управления библиотекой запрещает добавление неподдерживаемых папок в библиотеки. Однако, если ваше приложение зависит от содержимого папок, которые не могут быть локально или удаленно проиндексированы Windows Search, вы можете запросить диалоговое окно с флагом LMD_ALLOWUNINDEXABLENETWORKLOCATIONS, отменяющим стандартные настройки и позволяющим включать такие папки. Вы также можете использовать один из новых API, вроде SHAddFolderPathToLibrary, которые мы рассмотрели в статье о вспомогательных функциях библиотек Windows 7, для добавления папок, включая папки, которые не могут быть проиндексированы.

Эта статья завершает наше путешествие по библиотекам Windows 7. Далее мы рассмотрим Managed Code API и приступим к публикациям о панели задач Windows 7.
Источник: www.thevista.ru