вторник, 26 мая 2015 г.

Запуск Kodi, или работа с пультом дистанционного управления в Windows

Да, я не ошибся, речь пойдет о запуске Kodi (так теперь называется старый добрый XBMC). Что такого может быть в обычном запуске простой программы для Windows? Ну хорошо, пусть не простой, пусть отличной программы. В общем, в чем подвох? А фишка в том, что я собираюсь рассказать о необычном способе запуска - при помощи пульта дистанционного управления. Но сначала, как обычно, немного предыстории.



В качестве HTPC у меня выступает немолодой уже Acer Revo RL100. Это довольно интересная машинка. Нет, она и на момент своей ранней юности не была топовой моделью - с точки зрения производительности. Но в ней были реализованы очень интересные решения. Хотя, собственно, почему “были”? Они (решения) своей актуальности не потеряли и сейчас.

Один из критериев – внешний вид – носит очень субъективный характер. На мой взгляд, компьютер выглядит довольно стильно, что, учитывая его предназначение - находиться рядом с телевизором, совсем немаловажно. К тому же, Acer можно разместить как горизонтально, так и вертикально, что позволяет оптимально использовать пространство, которого, как обычно, не хватает.
Acer Revo RL100 можно расположить и вертикально и горизонтально

Другой интересной особенностью этого устройства, наверное, самой значительной, является пульт дистанционного управления. Хотя я не знаю, правильно ли этот компонент называть именно пультом. Нет, дистанционное управление, бесспорно, им обеспечивается, но вот по функционалу он значительно опережает обычные пульты.

Пульт Acer получил название RevoPad

У меня почти такой же пульт, как и на картинке, только он еще и русифицирован - рядом с английскими буквами размещаются русские. Раскладка очень похожа на стандартную раскладку русифицированной клавиатуры, за исключением нескольких букв – все-таки ширина RevoPad-а невелика.

В чем же заключается изюминка этого пульта? Их, на самом деле, несколько. Во-первых, пульт снабжен аккумулятором. Для подзарядки его достаточно вставить до упора в отведенное для него специальное гнездо, размещенное под оптическим приводом DVD-RW. Аккумулятора хватает очень надолго – пульт без подзарядки спокойно живет пару-тройку недель. Во-вторых, пульт работает в двух режимах: в одном он работает как сенсорная клавиатура, в другом – как тачпад. Плюс, у него есть колесико. Если какое-то время не пользоваться пультом, он переходит в режим ожидания, чем, собственно, и объясняется его поразительная живучесть. Вывести пульт из этого состояния, как и переключить режим, можно с помощью специальной кнопки со светодиодом.

Если честно, этот пульт лично меня устраивает более, чем полностью. Единственное, что я с ним сделал, это запрограммировал вызов Kodi (а раньше – XBMC) на специальную клавишу – на RevoPad-е есть сенсорная клавиша с изображением домика. По этой клавише изначально вызывалась программа для управления медиа контентом производства самого Acer.

Перепрограммировать эту кнопку на вызов Kodi оказалось совсем не сложно – соответствие комбинаций клавиш вызываемым программам задается при помощи утилиты с говорящим названием Hotkey Utility, в ее настройках для комбинации клавиш Ctrl + F12 я указал путь к выполняемому файлу Kodi.

Поверили предыдущему абзацу? “Оказалось совсем не сложно” – как бы не так! Нет, все примерно так, много клавиш можно запрограммировать именно в настройках этой утилиты. Много, только – не F12. Ее просто нет в списке для выбора, и вручную ее не ввести. Хорошо, что настройки эти хранятся в реестре Windows  и их можно редактировать, добавлять, удалять, в общем, делать все, что заблагорассудится, при помощи regedit. Ниже выкладываю снимок того, что я вбил в реестре, чтобы получить нужный результат.

Редактор реестра - великая программа по настройке всего

В принципе, все получилось здорово, но вот только супруга к этому новому устройству управления симпатий  не испытывала. Ей было более удобно управлять XBMC (и впоследствии Kodi) при помощи обычного пульта. Ну как обычного… Когда-то я пользовался ноутом от HP, с которым поставлялся пульт дистанционного управления в паре с выносным приемником. Настроить работу этого пульта в паре с XBMC не составило большого труда, я уже писал об этом. Но вот запуск самого медиа центра настроить сразу не получилось.

Вот он - "обычный" пульт

Причина задержки заключалась в том, что я пытался вспомнить, как решал этот вопрос раньше. А решал я его при помощи специального программного обеспечения, созданного для работы с пультами дистанционного управления разработчиками какого-то медиа сервера. Но я не помнил ни название этого ПО, ни названия самого сервера. Поэтому копать пришлось заново. И, в результате этого процесса, мне посчастливилось найти более оптимальное решение, при использовании которого можно обойтись, практически, без стороннего софта.

Да, я нашел ту программу, которой пользовался раньше, называется она IRSS от разработчиков MediaPortal. Но я нашел еще и описание того, как работает пульт дистанционного управления непосредственно с Windows. Описание это пряталось в дебрях wiki для программы… Kodi! Вот нужная ссылка.

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

HKEY_LOCAL_MACHINE
  \SYSTEM
  \CurrentControlSet
   \Services
    \HidIr
     \Remotes
      \745a17a0-74d3-11d0-b6fe-00a0c90f57da

В этой ветке много чего интересного, но сейчас нам нужно знать, какой именно параметр отвечает за то, как преобразуются кнопки, нажимаемые на пульте, в какие-то понятные компьютеру, драйверу, операционной системе, программам команды. И из wiki становится понятным, что этот параметр имеет название ReportMappingTable.

Дальше еще интереснее. Значение этого параметра - хитро закодированный массив бинарных данных. Каждая кнопка кодируется семью байтами. Первый байт – код кнопки пульта. Это значение можно посмотреть в таблице. Второй, третий и четвертый байты всегда нули, по крайней мере, есть такое утверждение. Значение пятого байта определяет, каким образом следует интерпретировать следующие два байта (шестой и седьмой). И об этом стоит написать поподробней.

Если в этом байте указать значение 01, то следующая пара байтов содержит код мультимедийной клавиши или же код сообщения WM_APPCOMMAND, которые драйвер eHome будет посылать при нажатии на соответствующую кнопку пульта. Что именно пошлет драйвер – код клавиши или код сообщения – предугадать довольно сложно. Авторы описания провели экспериментальные исследования, результатом которого стала следующая таблица. Остается лишь отметить, что в шестом байте указывается младший байт генерируемого кода, а в седьмом – старший (два байта нужны из-за того, что мультимедийные кнопки иногда имеют коды больше 255).

Если в пятый байт занести значение 03, то драйвер будет генерировать так называемые “raw input” сообщения (“сырой ввод”, то есть, предварительно необработанные системой сообщения, можно почитать об этом, например, тут). Опять же, авторы дают рекомендации по использованию этого режима.

Ну и наконец, если в пятом байте установить значение 04, то драйвер eHome будет генерировать обыкновенные нажатия клавиатурных клавиш, то есть, нажатия на кнопки пульта будут преобразованы в нажатия клавиш на клавиатуре. При этом, шестой байт будет содержать так называемый модификатор – код, указывающий, какие специальные кнопки нажаты. Если этот байт равен нулю, то специальные клавиши как бы не нажимаются. Далее, клавише Control ставится в соответствие значение 1, клавише Shift – значение 2, клавише Alt – значение 4, и, наконец, клавише Windows – значение 8. То есть, если в шестой байт занести значение 0F, то будет эмулироваться нажатие комбинации клавиш Ctrl+Shift+Alt+Win, а если 03 – то комбинация Ctrl+Shift. В седьмом байте, при этом, должен указываться код обычной клавиатурной клавиши, подсмотреть который можно в этой табличке.

Вот и вся премудрость. Как же я применил все эти знания на практике? Я открыл программу regedit.exe, нашел нужный мне параметр и открыл его на редактирование. Я хотел, чтобы на зеленую кнопку с изображением флажка Windows вызывался любимый мною Kodi. Код этой кнопки, согласно информации из wiki Kodi, равен 0D. В бинарном массиве я нашел семь байт, отвечающих за обработку нажатия на эту кнопку пульта, в моем случае они выглядели так (пробелы я добавил для простоты воспиятия):

0D 00 00 00 04 03 1A

Я не стал разбираться, что это должно было значить, просто заменил на следующую последовательность байт (учтите, пробелы – только для красоты):

0D 00 00 00 04 01 45

Расшифровываем… Для кнопки пульта с кодом 0D (кнопка с флажком Windows) просим драйвер eHome эмулировать нажатие на клавиатурные клавиши (пятый байт равен 04) Ctrl (шестой байт равен 01) и F12 (седьмой байт равен 45). А так как на комбинацию клавиш Ctrl+F12 у меня назначен вызов Kodi, то я должен получить то, к чему стремился.

Итак, изменения сделаны, сохранены в реестре Windows, остается лишь перезагрузить компьютер и наслаждаться результатом.

Читателям осталось потерпеть совсем чуть-чуть. Выше я написал, что найденное решение позволяет решить задачу практически без использования стороннего софта. Но сам, по сути, использовал функциональность утилиты, поставляемой вместе с компьютером, а именно, Hotkey Utility. Можно ли обойтись без нее? Конечно же да! Для этого можно использовать возможности ярлыков (shortcuts) программ, создаваемых на рабочем столе Windows.

Когда создается (или редактируется) такой ярлык, есть возможность указать комбинацию клавиш, которая будет использоваться для запуска этого ярлыка. Собственно, картинка (правда, не для Kodi, для другой программы) представлена ниже:

Просто жмем нужные клавиши

Устанавливаете в обведенное поле курсор и просто нажимаете ту комбинацию клавиш, которую хотите использовать для запуска этого приложения. Все, после этого сохраняете настройку. И да, не забудьте, что в реестре, в параметре ReportMappingTable, надо будет закодировать именно эту, назначенную вами, комбинацию клавиш.

Вот такие дела…

Комментариев нет:

Отправить комментарий