Синхронизация библиотек Windows 7
И вот новая статья из серии, посвященной библиотеках 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 для отслеживания изменений элементов во всех папка библиотеки. Она может принять один элемент библиотеки, например, библиотеку «Музыка», как параметр для получения уведомлений о всем содержимом библиотеки. В таком случае приложение будет уведомлено обо ВСЕХ изменениях в статусе любых элементов в библиотеке «Музыка». К тому же, регистрация библиотеки позволит приложению получать уведомления на лету, так что библиотеки обновляются сразу после внесения изменений в библиотеку. Пользователь также может изменять папки, включаемые в библиотеку, без использования 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.
Comments
Anonymous
May 24, 2009
PingBack from http://asp-net-hosting.simplynetdev.com/%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%8f-%d0%b1%d0%b8%d0%b1%d0%bb%d0%b8%d0%be%d1%82%d0%b5%d0%ba-windows-7/Anonymous
June 11, 2009
Вот и подошло к концу наше продолжительное погружение в программные интерфейсы библиотек Windows 7 и