Windows 7: Теперь все устройства доступны в два щелчкаИсточник: rsdnru/ Бойко Алексей
Введение Откуда Windows берет информацию об устройстве
Как Windows сопоставляет файл описания и устройство Hardware ID Model ID Шаг 0: Подготовительные работы Узнаем Hardware ID флешки
XSD-схемы CABARC.EXE Шаг 1: Меняем иконку в папке "Устройства и принтеры" Структура архива .devicemetadata-ms
PackageInfo.xml WindowsInfo.xml DeviceInfo.xml Создание архива .devicemetadata-ms Шаг 2: Простой Device Stage Изменения в PackageInfo.xml
Behavior.xml и Resource.xml Шаг 3: Выводим текущие параметры устройства ВведениеДанная статья посвящена сразу двум нововведениям в Windows 7, облегчающим работу с телефонами, принтерами, плеерами и другим оборудованием. Речь о новой папке "Устройства и принтеры" и страницах Device Stage. Теперь все устройства собраны в одном месте и доступны в два щелчка: "Пуск" -> "Устройства и принтеры". Устройства отображаются фотореалистичными иконками, так что нам даже не надо знать, как они называются. Двойной щелчок по иконке откроет страницу Device Stage, на которой представлены основные функции и параметры устройства. Отметим, что папка "Устройства и принтеры" и Device Stage - это именно две (а не одна) возможности, дополняющие друг друга. Почти все оборудование отображается в "Устройствах и принтерах", но не у каждого есть страница Device Stage. Для знакомства с новшествами будем использовать обычную флешку. За четыре шага, постепенно усложняя пример, мы создадим полноценную страницу Device Stage. Каждый шаг - это готовое к использованию, реально работающее решение. К статье прилагаются четыре папки, по одной на шаг. Как это работаетОткуда Windows берет информацию об устройствеДля хранения иконок и информации об оборудовании в Windows появилась специальная папка - DeviceMetadataStore. Когда мы подключаем к компьютеру свой плеер или телефон, система находит в ней соответствующий .devicemetadata-ms-файл с описанием. devicemetadata-ms-файлы автоматически загружаются с сервера Microsoft, но их можно положить в папку %PROGRAMDATA%\Microsoft\Windows\DeviceMetadataStore и вручную. Файлы описания создаются разработчиками устройств и передаются Microsoft. Перед размещением на сервере Microsoft проверяет, помечает и подписывает полученные файлы.
На самом деле, файл .devicemetadata-ms - это архив. Чтобы посмотреть его содержимое, нужно поменять разрешение на .cab. Чуть позже мы подробно рассмотрим содержимое таких архивов (собственно, этому-то и посвящена статья). Как Windows сопоставляет файл описания и устройствоКакой именно файл соответствует данному устройству, система определяет с помощью:
Hardware IDЛюбое оборудование, совместимое с Windows, при подключении сообщает системе один или несколько идентификаторов Hardware ID. С помощью этих идентификаторов Windows определяет, какой драйвер нужно использовать для устройства. Теперь Hardware ID применяется и для поиска соответствующего devicemetadata-ms-файла. В некоторых случаях такой способ связи устройства c файлом описания подходит, а в некоторых - нет. Причина в том, что разные устройства могут использовать один и тот же драйвер, и, соответственно, сообщать один и тот же Hardware ID. Простой пример: новая модель телефона использует тот же драйвер, что и старая. Пользователю гораздо приятнее будет увидеть иконку с изображением своего нового телефона. И это действительно важно, ведь мы говорим о нововведениях, призванных упростить и сделать приятной работу пользователя. Какой смысл в фотореалистичной иконке, если на ней изображен другой аппарат? Коллега на работе радовался как ребенок, когда его новая красивая красная мышка от Microsoft отобразилась в папке "Устройства и принтеры" иконкой именно красного цвета. А ведь мышка выпускается в шести цветовых вариантах. Тут мы подошли к новому способу идентификации оборудования - Model ID. Model IDModel ID - это новый способ идентификации устройств, появившийся в Windows 7. Model ID не используется для поиска драйверов, а значит, не служит заменой Hardware ID. Устройству можно назначить только один Model ID. Конечно, старые устройства не имеют Model ID и не сообщают его при подключении, но в новые модели производители могут добавить эту возможность.
В зависимости от выбора разработчика, в файле описания указывается или список Model ID, или список Hardware ID тех устройств, к которым относится файл. Шаг 0: Подготовительные работыПодведем промежуточный итог и набросаем краткий план действий. Сейчас наша флешка отображается в папке "Устройства и принтеры" иконкой по умолчанию, никакой специфической информации об устройстве не выводится (рисунок 1).
Чтобы Windows могла показать более полные данные о флешке, нужно:
Узнаем Hardware ID флешкиВ нашем случае выбор между Hardware ID или Model ID совершенно непринципиален. Возьмем Hardware ID, так как у любой флешки он точно есть. Чтобы узнать Hardware ID, нужно: в папке "Устройства и принтеры" щелкнуть правой кнопкой мыши по иконке флешки -> Свойства -> вкладка Оборудование -> тип Дисковые устройства -> кнопка Свойства -> в новом окне вкладка Сведения -> в выпадающем списке Свойство : ИД оборудования (рисунок 2).
Вверху находится идентификатор, точнее всего определяющий устройство, далее идут более общие идентификаторы. Для наших целей лучше взять самый верхний. XSD-схемыКак уже говорилось, файл .devicemetadata-ms - это на самом деле архив. Этот архив содержит только XML-файлы и картинки, разложенные по подпапкам. Все описывается с помощью XML, так что нам придется много с ним работать. Оставим возню с разными видами блокнотов школьникам и любителям "альтернативных решений". Мы-то знаем, что ничего лучше Visual Studio не придумали - остается только добавить нужные XSD схемы в папку ..\Visual Studio\Xml\Schemas Что бы получить XSD-схемы, нужно установить "Microsoft Device Experience Development Kit" (см. ссылки в конце статьи). Схемы находятся в каталоге ..\Microsoft Device Experience Development Kit 7R2\General\XML Schemas\ CABARC.EXEДля создания файлов .devicemetadata-ms нужна утилита CABARC.EXE. Отдельно её скачать нельзя, она идет в комплекте с "Device Stage Visual Editor Tool". Да, да, для изготовления страниц Device Stage есть GUI-приложение. Но его мы использовать не будем. И не потому, что нам чужд комфорт, или мы презираем все, чем могут пользоваться непосвященные непрограммисты (как это часто делают ярые воинствующие поклонники не-Windows-систем). Просто работа "вручную" даст нам больше гибкости и лучшее понимание процесса. Шаг 1: Меняем иконку в папке "Устройства и принтеры"В первом шаге мы создадим самый простой файл описания, не использующий возможности Device Stage. Нет никакой необходимости приводить в тексте статьи полные листинги XML-файлов - файлы для первого шага можно найти в папке "example1", прилагаемой к статье. Поэтому в листингах будут показаны только те части, на которые нужно обратить внимание, самое главное выделено. Структура архива .devicemetadata-msНа рисунке 3 представлена структура архива .devicemetadata-ms. В качестве названия архива должен использоваться глобальный уникальный идентификатор (GUID). Например: 0055f9a7-ffef-4017-be40-e1e118fa4e86.devicemetadata-ms.
Из рисунка 3 видно, что нужно создать три XML-файла (PackageInfo.xml, DeviceInfo.xml, WindowsInfo.xml) и одну иконку. PackageInfo.xmlКак и следует из названия, этот файл используется для описания .devicemetadata-ms-пакета (файла описания). В нем указывается такая информация, как время создания пакета, используемые XML-схемы, локализация по умолчанию. Но самое главное - там указывается список Hardware ID (или список Model ID), c которыми связан пакет. Листинг 1. PackageInfo.xml
Обратите внимание на приставку "DOID", которую нужно указать перед Hardware ID. Есть еще приставка "SFDOID" (Single Function Device), но она сейчас не используется и зарезервирована для будущих версий Windows. Эти приставки указывают на то, сколько функций выполняет устройство - одну или несколько. Например, часто встречаются многофункциональные устройства, сочетающие в себе принтер, факс и сканер. Чуть позже мы еще раз поговорим о функциях устройства. WindowsInfo.xmlЗдесь описываются правила отображения иконки и страницы Device Stage. Листинг 2. WindowsInfo.xml
ShowDeviceInDisconnectedState - показывать устройство в папке "Устройства и принтеры", когда устройство не подключено. Иконка неподключенного устройства будет более бледной (см. рисунок 1). Кстати, задать свою отдельную иконку для отключенного состояния оборудования нельзя. LaunchDeviceStageOnDeviceConnect - открывать страницу Device Stage автоматически при подключении устройства. LaunchDeviceStageFromExplorer - открывать Device Stage по двойному щелчку по иконке. DeviceInfo.xmlЛучше один раз увидеть, чем сто раз услышать (рисунок 4).
Рисунок 4 говорит сам за себя. Стоит отметить только узел DeviceCategory, который в нашем случае указывает на то, что устройство - это флешка. Если устройство - многофункциональное, можно указать несколько категорий (например, принтер часто является и сканером). Помните, выше, когда описывали PackageInfo.xml, мы упоминали приставки "DOID" и "SFDOID"? Первый узел DeviceCategory указывает на главную категорию - устройство, сочетающее в себе и принтер и сканер, чаще всего называют "принтером со встроенным сканером", но не "сканером со встроенным принтером".
Полный список категорий с пояснениями находится в документе "How to Create a Device Metadata Package for Devices and Printers". Создание архива .devicemetadata-msТеперь у нас есть все необходимые файлы (опустим процесс получения иконки). Создадим следующую структуру директорий (листинг 3): Листинг 3. Структура директорий для создания архива .devicemetadata-ms
Запускаем CABARC.EXE (листинг 4). Листинг 4. Вызов CABARC.EXE (все в одну строку без переносов)
Копируем 0055f9a7-ffef-4017-be40-e1e118fa4e86.devicemetadata-ms в DeviceMetadataStore. Шаг 2: Простой Device StageВо втором шаге мы доработаем пример так, что при двойном щелчке по иконке будет открываться простая страница Device Stage. Готовый пакет находится в папке "example2". В структуре архива .devicemetadata-ms появится новая папка DeviceStage (рисунок 5).
Прежде всего подредактируем WindowsInfo.xml, чтобы по двойному щелчку по иконке открывалась страница Device Stage. Листинг 5. Изменения в WindowsInfo.xml для поддержки Device Stage
Изменения в PackageInfo.xmlНужно также внести изменения и в PackageInfo.xml (листинг 6). Листинг 6. Изменения в PackageInfo.xml для поддержки Device Stage
Добавилась еще одна Metadata, но это неинтересно. Обратить внимание стоит на узел ExperienceID. Помните, в начале статьи мы говорили о том, что Microsoft помечает и подписывает .devicemetadata-ms-файлы (см. раздел "Откуда Windows берет информацию об устройстве")? Узел ExperienceID и есть та самая метка, которую выставляет Microsoft. Для экспериментов мы подставили произвольный GUID. Конечно, подставить GUID самостоятельно без Microsoft мы можем, а вот подписать пакет без Microsoft не получится.
И тут нас ждет небольшое разочарование. Чтобы наш неподписанный файл описания был принят системой, нужно перейти в тестовый режим (листинг 7). Листинг 7. Переход в тестовый режим. Требуется перезагрузка.
Behavior.xml и Resource.xmlBehavior.xml описывает внешний вид страницы Device Stage и то, какие функции на ней будут представлены (рисунок 6).
В странице Device Stage мы использовали не все предусмотренные стилистические возможности. Отметим, что значение атрибута ExperienceID должно совпадать со значением одноименного узла в файле PackageInfo.xml. В узле taskCategoryMapping перечисляются доступные задачи. В нашем примере указана одна задача - "Просмотр файлов". Более подробно задачи мы рассмотрим в четвертом шаге. Текст строк маркированного списка (узел marketingBullets) указывается в Resource.xml и связывается с помощью атрибута id узлов bullet (листинг 8). Листинг 8. Resource.xml
Создаем архив .devicemetadata-ms, входим в тестовый режим, копируем архив в DeviceMetadataStore, радуемся. Шаг 3: Выводим текущие параметры устройстваВ шапке Device Stage взамен маркированного списка (см. рисунок 6) можно выводить до 6 текущих параметров устройства, например, уровень заряда батареи и количество свободного места. Батареи во флешке нет, поэтому будем довольствоваться выводом информации о свободном месте (рисунок 7).
Внесем дополнения в Behavior.xml (листинг 9). Листинг 9. Изменения в Behavior.xml для вывода информации о свободном месте
В Windows 7 предусмотрены встроенные возможности по определению текущих параметров подключаемых устройств. Для их использования нужно знать идентификатор statusProvider-а и названия свойств. Ну и конечно, нужно, чтобы устройство поддерживало такую возможность. Можно создавать свои собственные статусы - интересная тема, но и объемная. Придется отложить её для будущих статей. Тут отметим только, что информацию о встроенных statusProvider-ах можно найти в "Microsoft Device Experience Development Kit". Например, используемый нами statusProvider {c2dae44d-c850-425c-b466-d8cbc1469f5d} описан в документе "Windows 7 Device Stage Portable Devices Development Guide". Еще немного доработаем пример. Пусть по щелчку по статусу (информации о свободном месте) будет открываться содержимое флешки, т.е. будет выполняться задача "Просмотр файлов", о которой мы уже говорили в "Шаге 2". Посмотрите на листинг 10. Листинг 10. Выполнение задачи по щелчку по статусу
Задача должна быть обязательно указана и в узле taskCategoryMapping, то есть нельзя повесить задачу на статус и при этом не вывести её повторно среди списка всех доступных задач. Чтобы иконка устройства отображалась на панели задач, как на рисунке 7 справа, нужно отредактировать WindowsInfo.xml - листинг 11. Листинг 11. Включаем иконку на панели задач. WindowsInfo.xml
Шаг 4: ЗадачиМы уже знаем, что в Windows 7 есть встроенные statusProvider-ы. Также в Windows есть и встроенные задачи. Задачи рассортированы по категориям. Чтобы добавить задачу, нужно знать её GUID и GUID категории (узел taskRef в листинге 10). Можно создавать свои задачи, которые будут открывать сайты и запускать приложения. Кроме того, для самодельных задач можно выставлять условия. Например, сделать так, что задача будет видна, только если компьютер подключен к сети или установлена определенная программа. Можно даже проверять ключи в реестре. В четвертом шаге мы добавим самодельную задачу, открывающую внутри Device Stage web-страницу (рисунок 8). Задача будет видна, только если есть подключение к интернету.
Все задачи должны относиться к какой-нибудь категории. Поэтому вначале нужно её (категорию) создать. Посмотрите на рисунок 9. Там показаны новые элементы в папке DeviceStage нашего архива .devicemetadata-ms.
Создать свою категорию задач - это значит создать подпапку для "Task". При этом название папки должно следовать шаблону: {произвольный GUID} (скобочки обязательны). Далее нужно подготовить Tasks.xml и Resource.xml (листинг 12). Листинг 12. Tasks.xml
Resource.xml
В Tasks.xml значение атрибута taskGroupGuid должно совпадать с GUID категории (с названием папки, которую мы создали ниже "Task"). Идентификатор задачи (атрибут id узла task) - это произвольный GUID, заключенный в фигурные скобки. Также обратим внимание на необязательный узел requirements. В нем задаются условия отображения задачи. В нашем примере задача требует подключения к Интернет. Перечислять возможные типы команд (атрибут type узла command) мы не будем - ведь у нас есть Visual Studio с подключенными XSD-схемами, которая выводит всплывающие подсказки. Вроде бы дополнительных пояснений листинг 12 не требует. Все готово, остается только добавить задачу в behavior.xml. Из листинга 13 видно, что самодельная задача добавляется точно так же, как встроенная в Windows. Листинг 13. Behavior.xml. Самодельные задачи добавляются так же, как встроенные в Windows
Что дальшеЕсли вы дочитали до этого места - значит меня, как автора, можно поздравить. Еще немного, и издателю пришлось бы делать твердый переплет, а мне - писать благодарности. И все же, статья оставляет больше вопросов, чем дает ответов. Мы узнали, как организованы новые возможности Windows 7 - папка "Устройства и принтеры" и страницы Device Stage, как система различает устройства, и о том, что в Windows 7 появилась новая система идентификации оборудования по ModelID. А еще нас поджидало разочарование - мы никогда не сможем сделать для своего телефона самую лучшую, самую удобную страницу Device Stage. Вернее, сделать-то сможем, а вот использовать - вряд ли, не будем же мы все время сидеть в тестовом режиме. Нам остается только довольствоваться фотореалистичной иконкой - это не требует подписи Microsoft.
По самым скромным прикидкам, за бортом остались:
Нельзя не отметить высокое качество обучающих материалов Microsoft. Описание очень полное, хорошо структурировано и написано понятным языком. СсылкиСсылки на все материалы, упоминающиеся в статье, перечислены на странице "Windows Device Experience" (я же говорил, что информация хорошо структурирована): http://www.microsoft.com/whdc/device/DeviceExperience/default.mspx. |