Продукты
 Где купить
 Пользователям
 Для бизнеса
 Мы на связи

   

Программа IRlink

Скачать свежую версию error: property not read


null
null
null

Использование пульта дистанционного управления в Windows

Это перевод с английского статьи с сайта Microsoft (MSDN) об механизме использования пультов дистанционного управления в Windows, который предусмотрен в Windows Media Center Edition. Статья рассчитана, в первую очередь, на разработчиков, но будет интересна для поверхностного чтения и другим людям. Анализ возможностей Windows по работе с пультами ДУ, основанный на этой статье, выйдет в ближайшее время. Оригинал статьи находится по адресу http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwmt/html/remote_control.asp

Введение

Начиная с Microsoft Windows XP Service Pack 1, Windows XP Professional и XP Media Center Edition, операционная система поддерживает ввод через инфракрасный пульт дистанционного управления. Это расширяет возможности персонального компьютера как части домашней развлекательной системы.

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

  • Система ввода через инфракрасную связь. Описание пульта управления и его связь с компьютером.
  • Кнопки пульта управления. Описание стандартных и дополнительных кнопок пульта.
  • Работа с командами пульта. Описывает, как приложение получает команды от пульта, и как команды соотносятся с кнопками пульта.
  • Обработка команд "пуск"/"пауза". Описывает, как обрабатывать команды от кнопок "пуск" и "пауза" на пульте в комбинации с "пуск"/"пауза" на клавиатуре.
  • Дополнительно. Ссылки на ресурсы по теме.

Система ввода через ик связь

На рисунке показан пульт, разработанный для Медиа-Центра (Media Center PC).

Пульт управления для Media Center

Внешний вид пульта может зависеть от производителя. Тем не менее, основная фунциональность не меняется. Пульт управления взаимодействует с ик приёмником, который состоит из следующих частей:

  • датчик, обрабатывающий сигналы с пульта
  • микросхема для распознавания кодов пульта
  • usb модуль, обеспечивающий подключение к компьютеру и уведомление программ о принятых сигналах
  • два излучающих порта

Также ик приёмник требует драйвер, отвечающий спецификации "Plug and Play". Базовая версия драйвера устанавливается с операционной системой Windows, которая поддерживает ик приёмник для пульта ду. Соединительный кабель позволяет пользователям размещать ИК датчик около монитора так, что они могут целиться пультом в монитор при управлении компьютером. Дополнительно ик приёмник может быть вмонтирован производителем в переднюю панель системного блока.

Сигнал от пульта ду обрабатывается следующим образом:

  1. датчик принимает сигнал и посылает его драйверу на компьютер
  2. драйвер преобразовывает принятый код кнопки в системное сообщение WM_INPUT, WM_APPCOMMAND, WM_KEYDOWN, WM_KEYPRESS или WM_KEYUP
  3. Windows помещает его в очередь сообщений приложения
  4. активная в данный момент программа обрабатывает интересующие её сообщения; например, программа для проигрывания цифрового медиа-потока может обрабатывать сообщения, отвечающие кнопкам управления проигрыванием (пауза, пуск, стоп, перемотка), но пропускать сообщения от цифровых кнопок

Кнопки пульта управления

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

Навигационные кнопки:

  • домой (в главное меню)
  • вверх
  • вниз
  • влево
  • вправо
  • ок
  • назад
  • детали
  • гид (справка)
  • TV/Jump

Управление проигрыванием:

  • пуск
  • пауза
  • стоп
  • ускоренное воспроизведение
  • перемотка назад
  • прокрутить вперёд
  • проиграть последний момент ещё раз

Общее управление:

  • прибавить громкость
  • убавит громкость
  • следующий канал/страница
  • предыдущий канал/страница
  • выключить звук
  • DVD меню

Кнопки для ввода данных:

  • 0
  • 1
  • 2 ABC
  • 3 DEF
  • 4 GHI
  • 5 JKL
  • 6 MNO
  • 7 PQRS
  • 8 TUV
  • 9 WXYZ
  • очистить
  • ввод

Вдобавок к обязательным производитель может предусмотреть дополнительные кнопки, которые также распадаются на четыре категории. Программы не должны полагаться на наличие этих кнопок.

Кнопки быстрого доступа:

  • моё телевидение
  • моя музыки
  • записанное тв
  • мои картинки
  • моё видео

DVD кнопки:

  • DVD угол
  • DVD аудио
  • DVD субтитры

Кнопки цифровой клавиатуры:

  • #
  • *

Специальные кнопки, предусмотренные производителем:

  • кнопка 1
  • кнопка 2

Получение команд пульта

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

Следующая таблица показывает windows-сообщения и кнопки клавиатуры, соответствующие обязательными и дополнительным кнопкам пульта ду.

Кнопка пульта Сообщение Команда Клавиатурный эквивалент
# в разработке SHIFT+3
* в разработке SHIFT+8
Back WM_APPCOMMAND APPCOMMAND_BROWSER_BACK BACKSPACE
Chan/Page Down WM_APPCOMMAND APPCOMMAND_MEDIA_CHANNEL_DOWN MINUS SIGN (-)

CTRL+MINUS SIGN

PAGE DOWN

Chan/Page Up WM_APPCOMMAND APPCOMMAND_MEDIA_CHANNEL_UP PLUS SIGN (+) CTRL+SHIFT+PLUS SIGN

PAGE UP

Clear WM_KEYDOWN VK_ESCAPE ESC
Details WM_INPUT
Down WM_KEYDOWN VK_DOWN DOWN ARROW
DVD Angle WM_INPUT
DVD Audio WM_INPUT
DVD Menu WM_INPUT
DVD Subtitle WM_INPUT
eHome Not for use by applications.
Enter VK_RETURN ENTER
Fwd WM_APPCOMMAND APPCOMMAND_MEDIA_FASTFORWARD CTRL+SHIFT+F
Guide WM_INPUT
Left WM_KEYDOWN VK_LEFT LEFT ARROW
Mute WM_APPCOMMAND APPCOMMAND_VOLUME_MUTE F8
My Music WM_INPUT
My Pictures WM_INPUT
Recorded TV WM_INPUT
My TV WM_INPUT
My Videos WM_INPUT
Number keys WM_KEYDOWN VK_0 to VK_9 0 to 9
OEM1 WM_INPUT
OEM2 WM_INPUT
OK WM_KEYDOWN VK_RETURN ENTER

SPACEBAR

Pause WM_APPCOMMAND APPCOMMAND_MEDIA_PAUSE CTRL+P
Play WM_APPCOMMAND APPCOMMAND_MEDIA_PLAY CTRL+SHIFT+P
Record WM_APPCOMMAND APPCOMMAND_MEDIA_RECORD CTRL+R
Replay WM_APPCOMMAND APPCOMMAND_MEDIA_PREVIOUSTRACK CTRL+B
Rewind WM_APPCOMMAND APPCOMMAND_MEDIA_REWIND
Right WM_KEYDOWN VK_RIGHT RIGHT ARROW
Skip WM_APPCOMMAND APPCOMMAND_MEDIA_NEXTTRACK CTRL+F
Standby WM_INPUT
Stop WM_APPCOMMAND APPCOMMAND_MEDIA_STOP CTRL+S
Up WM_KEYDOWN VK_UP UP ARROW
TV/Jump WM_INPUT
Vol Down WM_APPCOMMAND APPCOMMAND_VOLUME_DOWN F9
Vol Up WM_APPCOMMAND APPCOMMAND_VOLUME_UP F10

Кнопки, которые генерируют сообщения WM_INPUT, определены в соответствии со спецификацией HID (HID, устройства для взаимодействия с пользователем). Следующая таблица показывает соответствие HID этим кнопкам.

Кнопка Кодовая страница Название страницы Collection
usage ID
Button
usage ID
Details 0x0C Consumer controls 0x01 0x209 (AC properties)
DVD Angle 0xFFBC определяется производителем 0x88 0x4B
DVD Audio 0xFFBC определяется производителем 0x88 0x4C
DVD Menu 0xFFBC определяется производителем 0x88 0x24
DVD Subtitle 0xFFBC определяется производителем 0x88 0x4D
Guide 0x0C Consumer controls 0x01 0x8D (AC Program Guide)
My Music 0xFFBC определяется производителем 0x88 0x47
My Pictures 0xFFBC определяется производителем 0x88 0x49
My TV 0xFFBC определяется производителем 0x88 0x46
My Videos 0xFFBC определяется производителем 0x88 0x4A
OEM1 0xFFBC определяется производителем 0x88 0x80
OEM2 0xFFBC определяется производителем 0x88 0x81
Recorded TV 0xFFBC определяется производителем 0x88 0x48
Standby 0x01 Generic desktop 0x80 0x82
TV/Jump 0xFFBC определяется производителем 0x88 0x25

Для того, чтобы получать сообщение WM_INPUT, приложение сначала должно зарегистрировать устройство, от которого оно хочет получать данные. Это можно сделать с помощью функции RegisterRawInputDevices из Win32 API. Каждая структура RAWINPUTDEVICE , переданная этой функции, определяет тип использования.

Следующий пример на С++ регистрирует устройство для получения ввода с кнопок с кодовой страницы, определённой производителем, и с кодом использования 0x88:

RAWINPUTDEVICE Rid[1];

Rid[0].usUsagePage = 0xFFBC;
Rid[0].usUsage = 0x88; 
Rid[0].dwFlags = 0;

if (RegisterRawInputDevices(Rid, 1, sizeof(Rid[0])) == FALSE) 
{
    ErrorExit();  // Add error-handling code here.
}

Чтобы определить событие, которые вызвало сообщение WM_INPUT, приложение должно разобрать данные, переданные в оконную процедуру как параметр lParam.

Если вы используете Microsoft .NET Framework, вам надо реализовать WndProc для обработки сообщений. WndProc — это член класса NativeWindow в пакете System.Windows.Forms. Перегруженный метод вызывается каждый раз, когда новое сообщение добавлено в очередь сообщений. До выхода из метода надо вызвать перегруженный метод класса-предка, чтобы гарантировать корректную обработку всех сообщений.

Следующий код на C# демонстрирует, как обрабатывать WM_KEYDOWN сообщения:

using System.Windows.Forms;
.
.
.
class Form1Window : NativeWindow
{ 
  private const int WM_KEYDOWN = 0x0100;
  private int iChar;
  public Form1 form;
 
  protected override void WndProc(ref Message message)
  {
    // Handle the navigation and numeric buttons.
 
    if (message.Msg == WM_KEYDOWN)
    {
      iChar = message.WParam.ToInt32();
 
      switch(iChar)
      {
        case (int)Keys.D0:
          // Handle 0 key here.  
          break;
       // Insert more cases here.
.
.
.
      }  // End switch.
    }    // End key messages.
    base.WndProc(ref message);
  }      // End WndProc
}        // End class.

При инициализации главной формы надо создать экземпляр класса Form1Window и присвоить его значение главной форме.

public Form1()
{
  InitializeComponent();
  Form1Window win = new Form1Window();
  win.form = this;
  win.AssignHandle(this.Handle);
} 

Обработка команд пуск и пауза

Кнопки "пуск" и "пауза" на пульте ду генерируют разные команды, APPCOMMAND_MEDIA_PLAY и APPCOMMAND_MEDIA_PAUSE, соответственно. К тому же, некоторые клавиатуры используют одну и ту же кнопку для переключения между пуском и паузой, генерируя APPCOMMAND_MEDIA_PLAY_PAUSE сообщение. Приложения должны уметь обрабатывать сообщения как от пульта ду, так и от клавиатуры, отслеживая состояние воспроизведения и реагируя надлежащим образом. Следующая таблица показывает состояние воспроизведения, команды с клавиатуры и пульта и желательное действие, которым приложение должно отвечать на сообщения.

Состояние воспроизведения Команда Желательное действие
остановлено APPCOMMAND_MEDIA_PLAY пуск
остановлено APPCOMMAND_MEDIA_PAUSE ничего не делать
остановлено APPCOMMAND_MEDIA_PLAY_PAUSE пуск
проигрывание APPCOMMAND_MEDIA_PLAY ничего не делать
проигрывание APPCOMMAND_MEDIA_PAUSE пауза
проигрывание APPCOMMAND_MEDIA_PLAY_PAUSE пауза
пауза APPCOMMAND_MEDIA_PLAY пуск
пауза APPCOMMAND_MEDIA_PAUSE ничего не делать
пауза APPCOMMAND_MEDIA_PLAY_PAUSE пуск

Дополнительно

За дальнейшей информацией о пользовательских устройствах (HID) и структурами HID-данных, обращайтесь к домашнему сайту протокола USB (http://www.usb.org).

Чтобы узнать больше о том, как работать с HID данными в составе WM_INPUT сообщений, смотрите статью "Низкоуровый ввод" в MSDN.

Чернорук Павел, pavelIRLink.ru
Опубликовано 11 сентября 2005.

Главная l Продукты | Где купить | Пользователям | Предложения для бизнеса | Мы на связи | Мешки-сетки для хранения спальников
© 2003–2010 автор идеи Павел