Windows 7 API для управляемого кода

Как уже упоминалось ранее при обсуждении библиотек Windows 7 .NET Interop Sample Libraries, большинство API для Windows 7 написаны на C, C++ и COM и не имеют аналогов в .NET. Это немного осложняет жизнь разработчиков управляемого кода, вынуждая их создавать собственные интероперабельные слои, обеспечивающие обмен информацией между .NET и собственными API Windows. Некоторыми собственными API можно легкостью пользоваться с помощью управляемого кода – для этого необходима функциональная совместимость, достигаемая добавлением ссылок в библиотеку типов COM. Однако, не всегда все так просто и для работы с проблемными библиотеками потребуется неплохое знание программирования «Win32». Собственно, для этого и был создан Windows API Code Pack для Microsoft .NET Framework.

В статье о библиотеках Windows 7 .NET Interop Sample Libraries мы привели несколько примеров кода, демонстрирующих как получить доступ к панели задач, библиотекам, сенсорам и возможностям мультисенсорного ввода из .NET, а также обещали рассказать о новом проекте Windows API Code Pack для библиотек Microsoft .NET Framework. Команда SDK Windows разработала Windows API Code Pack, чтобы обеспечить .NET-разработчикам простой доступ к функциям Windows 7, облегчая работу тем, кому будет достаточно того, что они доберутся до приложений клиентской версии Windows 7. В общем, это самая полезная вещь, которая понадобится .NET-разработчику для управления кодом Windows 7.

Windows API Code Pack (Code Pack) намного мощнее в смысле функциональных возможностей и качества, чем его предшественник Windows Vista Bridge. Code Pack содержит широкий спектр API, включая исчерпывающий набор объектов Windows Shell, Windows Taskbar, библиотеки и набор расширенных лингвистических служб Windows 7. Вот лишь краткий перечень API из Windows API Code Pack:

  • Поддержка объектов пространства имен Windows Shell, включая:
    • Библиотеки Windows 7
    • Известные папки (Known Folders)
    • Контейнеры, не относящиеся к файловой системе
  • Диалоги задач для Vista и Windows 7
  • Поддержка элементов управления Windows 7 Explorer Browser
  • Поддержка подсистемы свойств Shell
  • Windows 7 Taskbar
  • Поддержка общих файловых диалогов в Vista и Windows 7
  • Поддержка Direct3D 11.0 и DXGI 1.0/1.1 API
  • API платформы сенсоров
  • Расширенные лингвистические службы Windows 7

После того, как вы загрузите и разархивируете файл v0.85, вы увидите папку с примерами –Samples. Эта папка содержит примеры, демонстрирующие все API, входящие в состав API Code Pack. Там же вы найдете папку WindowsAPICodePack, которая содержит весь исходный код этой библиотеки. Это обеспечивает хорошую возможность понять взаимодействие библиотек, предоставляя полную свободу в изменении исходного кода.

На сегодняшний день доступно 13 примеров, а в будущих релизах их станет еще больше. Но сегодня мы обсудим лишь четыре из них.

WPF Explorer Browser

Прежде, чем вдаваться в детали этого примера, давайте поговорим о Windows Shell. Windows Shell – это основной фронт взаимодействия пользователя с Windows. Многие считают, что Windows Explorer это и есть «Windows», однако, это всего лишь часть всей оболочки Windows Shell. Оболочка включает и другие элементы пользовательского интерфейса, такие как панель задач, меню Start, окна Windows Explorer, корзину и даже результаты поиска. Самые обычные и известные объекты оболочки – файлы и папки. Однако, есть также и другие виртуальные объекты, такие как корзина, принтеры, библиотеки и т.д. Объекты оболочки организованы в иерархическую систему пространства имен, которая включает пространство имен файловой системы.

Правильно поняв устройство пространства имен оболочки и получив доступ к верхнему уровню системы Shell – рабочему столу – вы можете обойти всю структуру компьютера, включая файлы и папки, принтеры, шрифты, программные файлы и записанные телепередачи. Используя пространство имен, разработчики могут обращаться ко всем файлам и папкам и всем известным папкам, которые были упомянуты в статье " Заглядываем под капот библиотек").

До последнего времени все эти действия были недоступны .NET-разработчикам. Однако, новый Code Pack предлагает элемент управления Explorer Browser, а также набор предопределенных объектов, свойств и API, необходимых для работы в пространстве имен. В разделе, относящемся к оболочке (Shell project) вы найдете элементы управления Explorer Browser для WPF и WinForms, а также и все функциональные возможности, необходимые для операций с известными папками и такими объектами, как ShellObject, ShellLink, ShellFolder, ShellItem, ShellCollection, ShellThumbnail и т.д. Реализации панели задач и библиотек также используют многие из этих объектов оболочки. Как показано на следующем изображении, в примере Explorer Browser акцентируется внимание на элементе управления Explorer Browser, который помогает визуализировать пространство имен.

clip_image002

Аналогичным образом пример Shell Hierarchy Tree демонстрирует возможность перемещения по содержимому компьютера с помощью пространства имен:

clip_image004

Сенсоры

Code Pack также включает API для доступа к сенсорам через платформу Sensor and Location в Windows 7. Проект Sensor содержит все необходимые определения для нормальной работы с сенсорами, включая SensorManager для выбора и получения сенсора и класс сенсора для работы, и конечно SensorReport, который предоставит доступ к данным сенсора. Раздел Sensor включает два примера, иллюстрирующие работу сенсоров освещения и движения. Можно воспользоваться Virtual Light Sensor из SDK к версии-кандидату Windows 7, чтобы смоделировать различные условия освещения, а приложение Ambient Light Level – для отображения суммарного количества света, определенного сенсором.

clip_image006

Расширенные лингвистические службы

Расширенные лингвистические службы (далее ELS) – это еще одна очень интересная технология в Windows 7. ELS – новая функция, которая позволяет разработчикам использовать этот же набор API для увеличения разнообразия расширенных лингвистических функций. С помощью ELS API разработчики могут использовать информацию, полученную при автоматическом определении языка любого участка текста Unicode, чтобы сделать работу пользователей по всему миру более удобной. Платформа ELS – это связь между вашим приложением и сервисами ELS. Она обеспечивает простое использование некоторых видов лингвистических функциональных возможностей с помощью API, которые позволяют приложению обращаться и использовать определенные службы. Для получения дополнительной информации об API обращайтесь к статье о расширенных лингвистических службах.

Класс MappingAvailableServices позволяет сделать запрос на определение языка, на котором написана строка. Так можно либо проверить язык, либо узнать, на каком языке она написана. Это может стать весь мощным инструментом в руках разработчиков многоязычных приложений.

Функция проста в использовании. Например, следующая строка кода определяет языки, используемые в строке:

 scriptDetection.RecognizeText("This is English. АБВГД.", null))

Результат будет выглядеть примерно так:

 Recognized 2 script ranges

Range from 0 to 16, script Latn

Range from 17 to 22, script Cyrl 

Панель задач и библиотеки

Code Pack содержит необходимые API для работы с панелью задач и библиотеками в Windows 7. Для панели задач вы можете:

  • Создавать и управлять всплывающими списками (JumpLists), включая разделы «Задачи» и «Элементы»
  • Отображать динамические многослойные иконки и панели миниатюр
  • Использовать индикатор загрузки

На этом уровне разработке вы не можете управлять предварительным просмотром миниатюр и функцией, известной под названием AeroPeek. Для реализации этих функциональных возможностей потребуется Windows 7 Taskbar Sample .NET Interop Library.

Благодаря примеру с панелью задач вы научитесь полностью контролировать всплывающие списки, как показано на следующем изображении:

clip_image008

Code Pack также предлагает полную поддержку библиотек Windows 7, о которых более подробно мы поговорим в следующий раз.

Стоит отметить, что эта библиотека в настоящее время находится в разработке. Текущий номер версии – v0.85. Финальная версия этой библиотеки будет доступна к моменту релиза финальной версии Windows 7. Будем очень признательны, если вы поможете нам усовершенствовать библиотеку, загрузив исходный код и примеры и используя их в своих приложениях. Сообщайте об обнаруженных ошибках или предлагайте возникшие у вас идеи через форму обсуждения и форму диагностики проблем.