Устройства и печать
Введение
Материалы к лекциям 10-12 Вы можете скачать здесь.
Меня иногда поражает количество устройств, подключенных к тому скромному ноутбуку, на котором я это пишу. Помимо док-станции, которая сейчас служит подставкой для монитора и весьма эффективным пылесборником, есть мышь (проводная), клавиатура (беспроводная), два больших монитора, колонки, USB-диск, наушники, игровой контроллер Xbox и иногда – внешний жёсткий диск. Добавьте сюда пару принтеров и медиа-приемников, подключенных к локальной сети. Да, возможно я и близко не подошёл к тому, что у многих моих читателей, вероятно, есть дома и на работе!
Вместе со всем, что можно делать с отдельным компьютером, и со всей информацией, которую он получает из онлайновых ресурсов, есть еще одна огромная область, с которой приложения могут взаимодействовать напрямую. На самом деле, мы тратили большую часть времени в этом курсе, обсуждая то, что происходит с приложением и компьютером, на котором оно работает, об использовании сетей и служб для получения данных. Теперь пришло время посмотреть на другое аппаратное обеспечение, использование которого приложением позволит добиться у пользователя отличных впечатлений от работы с программой.
С некоторыми темами мы уже столкнулись, здесь я хочу их кратко упомянуть:
- В Главе 2 курса "Пользовательский интерфейс приложений для Windows 8, созданных с использованием HTML, CSS и JavaScript" мы узнали о возможности Съемные носители (Removable Storage) (в манифесте), которая позволяет приложению работать с USB-дисками и другими подключаемыми носителями информации. Когда устройство подключено, его папки становятся доступными с помощью Windows.Storage.KnownFolders.removableDevices (http://msdn.microsoft.com/library/windows/apps/windows.storage.knownfolders.removabledevices.aspx ), что является обычным объектом StorageFolder, подпапки которого подключены к конкретным запоминающим устройствам. Смотрите пример "Съемные носители" (http://code.msdn.microsoft.com/windowsapps/Removable-Storage-52cc49f0 ).
- В Главе 2 курса "Введение в разработку приложений для Windows 8 с использованием HTML, CSS и JavaScript" и Главе 4 курса "Пользовательский интерфейс приложений для Windows 8, созданных с использованием HTML, CSS и JavaScript" мы рассматривали API Windows.Media.Capture (http://msdn.microsoft.com/library/windows/apps/windows.media.capture.aspx ) для того, чтобы без особых усилий получать аудио, изображения и видео с подключенной к устройству камеры (смотрите пример "Пользовательский интерфейс камеры" ( http://code.msdn.microsoft.com/windowsapps/CameraCaptureUI-Sample-845a53ac)). Это включает возможность выбирать устройство захвата посредством Сценария 2 примера "Захват мультимедиа с использованием устройств для захвата" (http://code.msdn.microsoft.com/windowsapps/Media-Capture-Sample-adf87622 ), для чего используется API в Windows.Devices.Enumeration (http://msdn.microsoft.com/library/windows/apps/windows.devices.enumeration.aspx ).
- Кроме того, в Главе 4 курса "Пользовательский интерфейс приложений для Windows 8, созданных с использованием HTML, CSS и JavaScript" мы рассматривали API Windows.Media.PlayTo (http://msdn.microsoft.com/library/windows/apps/windows.media.playto.aspx ) для воспроизведения мультимедиа на устройствах, поддерживающих функцию воспроизведения на целевом устройстве, как показано в примере "Проигрывание мультимедиа на целевых устройствах воспроизведения" (http://code.msdn.microsoft.com/windowsapps/Media-PlayTo-Sample-fedcb0f9 ). Помимо этого есть гораздо больше, чем можно поместить в этот курс. Аппаратное обеспечение – это целый мир. Но мы , по крайней мере, будем знать, где находятся те или иные ресурсы и потратим некоторое время на изучение особенно интересных областей. Это следующие:
- Использование устройств с помощью API, которые не доступны напрямую в JavaScript, таких, как Win32. Приложения так же могут перечислять дополнительные устройства с помощью определеного интерфейса класса (Данная возможность взаимодействия с подобными устройствами в настоящий момент ограничена для приложений для Магазина Windows).
- Подключение к устройствам, находящимся в непосредственной близости от устройства, на котором исполняется ваше приложение, посредством WiFi Direct, Bluetooth, и технологии Near-Field Сommunications (NFC). В последнем случае, NFC может связывать приложения, работающие на устройствах, или использоваться для получения информации от недорогих RFID-меток.
- Последнее, но не менее важное – это печать, возможность которой несложно добавить к приложениям для Магазина Windows.
Кроме того, позвольте мне упомянуть класс приложений, которые мы в этом курсе не рассматриваем: Приложения Магазина Windows для устройств (Windows Store Device Apps), как их называют. Это приложения, которые могут быть автоматически получены из Магазина Windows, когда соответствующее устройство подключено к компьютеру под управлением Windows. Здесь наблюдается удивительное разнообразие, и мы можем здесь увидеть всё – от самых обычных наушников, мониторов, принтеров, Камер, мышей и клавиатур до новейших интеллектуальных телевизоров, устройств управления, домашних аудиосистем, медицинских сенсоров, научной аппаратуры, игрушек, устройств для оплаты покупок, музыкальных инструментов и так далее. Программы для устройств – это те самые приложения, которые всегда использовались на CD и служили для того, чтобы раскрыть функциональность устройства, теперь это – просто приложения, выполняющую такую функцию. Приложения для Магазина Windows, в общем случае, не могут работать со специализированными устройствами, если только нет некоторых общедоступных API, как мы увидим в первом разделе ниже.
Написание приложений для устройств выходит за пределы данного курса, но если вам это нужно, вы можете обратиться к видео с Channel 9 "Windows Store Device App Workshop" (http://channel9.msdn.com/Events/Windows-Store-Device-Apps-Workshop/Windows-Store-Device-Apps-Workshop-2012?t=charms ), вместе с материалом "Windows 8 Device Experience: Windows Store Device Apps" (http://msdn.microsoft.com/library/windows/hardware/br259108.aspx ) и "Windows Store device Apps for Specialized Connected Devices" (http://msdn.microsoft.com/library/windows/hardware/jj552525 ). Имеется и несколько примеров, таких, как "Windows 8 device app for camera sample" (http://code.msdn.microsoft.com/windowsapps/Metro-style-device-app-for-4f39b7bf ) и "Device apps for printers sample"( http://code.msdn.microsoft.com/windowsapps/Device-app-for-printers-91f363a9). Гораздо более специфичен пример "Custom driver access sample" (http://code.msdn.microsoft.com/windowsapps/Custom-device-access-sample-43bde679 ), который работает с аппаратным обеспечением FX2 в "OSR USB FX2 Learning Kit" (https://www.osronline.com/custom.cfm?name=index_fullframeset.cfmpgpageURL=https://www.osronline.com/store/index.cfm ) (из Open System Resources). Это аппаратное обеспечение предназначено для людей, изучающих разработку драйверов устройств, которые хотят понять тонкости этого дела.
Работа с устройствами
Как уже сказано, приложения для Магазина Windows обычно не имеют доступа к специализированному аппаратному обеспечению и интерфейсам, существующим у драйверов приложения: это особая привилегия приложений для устройств. Однако, если устройство и его драйвер подключили к системе некоторое API, у других приложений есть свойства для того, чтобы работать с ним, как показано на рис. 10.1.
Система API, доступных приложениям для Магазина Windows, разнообразна. Как мы видели ранее, WinRT может получать доступ к камере, целевым устройствам воспроизведения мультимедиа, устройствам хранения (в том числе – к USB-дискам, камерам, медиа-проигрывателям), и к устройствам ввода, в последнем случае подробности работы с аппаратным обеспечением скрыты за уровнем абстракции, наподобие указателей. WinRT так же предоставляет абстракцию, с помощью которой приложения могут работать с любым количеством принтером, как мы увидим в разделе "Простая печать" позже.
Рис. 10.1. Приложения для Магазина Windows в Windows 8 могут работать лишьс устройствами, которые имеют представляющие их API. У приложений Магазина Windows для устройств есть возможность работать с конкретными устройствами напрямую, используя их драйверы
В некоторых случаях, как мы увидим в нашем первом примере, посвященном работе с контроллером Xbox, это API Win32/COM, которые построены на определенном аппаратном интерфейсе. В случае с контроллерами API XInput (часть of DirectX) делает именно это. XInput не доступен напрямую приложениям, написанным на JavaScript, но компонент WinRT может получить такой доступ от имени приложения. Подобный компонент, как мы подробнее увидим в Главе 5, расширяет API WinRT для приложения и включается в его пакет. API, предоставленные такими компонентами, воспринимаются приложением как API WinRT. Они лишь расположены в пространствах имен, отличных от Windows.
Другая возможность, которую предоставляет WinRT – это перечисление устройств с определенным классом интерфейса устройства (GUID). Это полезно для построения и отображения списков устройств, когда присутствует более, чем одно устройство, и применимо как для обычно используемых устройств (вроде камер), так и для более редких устройств.
Еще один класс устройств, с которыми может работать приложение, называются Переносными устройствами Windows (Windows Portable Devices), которые включают в себя съемные носители и множество интересных устройств, использующих Bluetooth. Это один из случаев, когда полезна возможность перечислять устройства, так как имеется элемент управления ActiveX, который, в сущности, является COM API, посредством которого вы можете обмениваться информацией с такими устройствами.