`

СПЕЦИАЛЬНЫЕ
ПАРТНЕРЫ
ПРОЕКТА

Архив номеров

Как изменилось финансирование ИТ-направления в вашей организации?

Best CIO

Определение наиболее профессиональных ИТ-управленцев, лидеров и экспертов в своих отраслях

Человек года

Кто внес наибольший вклад в развитие украинского ИТ-рынка.

Продукт года

Награды «Продукт года» еженедельника «Компьютерное обозрение» за наиболее выдающиеся ИТ-товары

 

Арсен Бандурян

Локализация аппаратного ввода на устройствах с Windows Mobile / CE

+44
голоса

Как известно, многие производители устройств с "полноценной" QWERTY-клавиатурой не заморачиваются выпуском устройств с локализованной клавиатурой, или выпускают такие раскладки, что лучше бы не выпускали.. К счастью - это лечится. Об этом здешний пост.

Многие пользователи недоумевают - неужели так сложно сделать русскую клавиатуру в устройстве? Ведь выпускаются же немецкие, чешские, французские  и т.д. версии. Опуская разговоры о размерах рынка и т.д. приведу более существенное ограничение. В английском языке 28 букв. В русском - 33. На крохотных клавиатурах, банально не хватает клавиш. Сделать больше клавиш - каждая кнопка станет меньше. Да и разместить их удобно в ширину не получается - приходится переносить кнопки и/или комбинировать. Вспомните клавиатуры Nokia E61 и Samsung i*** с кобинированными (две буквы на одной кнопке) и "переехавшими" кнопками. Более-менее неплохо получилось в Nokia E75 и ее производных, хотя и там часть кнопок уехала достаточно далеко от родного места. Достаточно удачная линейка Motorola Q не продавалась в Украине и России именно потому, что американцы так и не смогли нормально втиснуть в имеющуюся клавиатуру все русские буквы. Вариант клавиатуры Motorola Milestone, где нарушено традиционное соответствие QWERTY русских и английских символов - весьма спорное решение (мне неудобно). Лучше всех получилось, конечно, у Apple, которая первой выпустила достаточно удобную софтовую клавиатуру, элегантно исключившую все проблемы с втискиванием клавиш, разными SKU и допуском к продажам в разных странах. Хотя в первой версии прошивки моего iPod Touch, помнится, русского (или украинского?) не было, да и сейчас на экране присутствуют не все кнопки.

В любом случае - все это лечится. На днях я стал счастливым обладателем ES400 (с английской QWERTY клавиатурой) на постоянной основе, и мне пришлось эту проблему решить. Для решения проблемы я воспользовался старой доброй условно-бесплатной утилитой AE Keyboard Mapper, которая, по сути, является низкоуровневым перехватчиком клавиш. Утилита позволяет держать в устройстве до 4 настраиваемых раскладок, переключаться между ними произвольной комбинацией клавиш (я выбрал Win+"."), запускать по комбинации клавиш приложения и др. В общем, задача сводится к написанию собственной раскладки. В комплекте с утилитой идут несколько примеров, подробная документация есть и на сайте. Но перед тем, как что-то писать, надо решить, как разместить недостающие буквы - как видно из рисунка, кнопок на клавиатуре явно меньше чем букв русского (и украинского) алфавита.

Локализация аппаратного ввода на устройствах с Windows Mobile / CE

Для себя я решил следующее: все буквы, которые "влезли" на клавиатуру ("Й-З", "Ф-Д" и "Я-Б") оставляю как есть, а оставщиеся назначаю по принципу Win+"такая же по порядку кнопка с краю": х = Win+O, ъ = Win+P, ж=Win+K, э = Win+L, ю = Win+",". Таким образом, два крайних правых столбца несут дополнительные буквы при нажатии кнопки Win. Программка (и драйвер ES400) позволяют различать Win и Shift+Win, поэтому с большими буквами проблем не возникло (а вот на моей MotoQ - возникли). Также, я решил добавить "Ё" на Win+T (там, где русская "е") и сделать из Shift+"." = "," (чтобы не переключать раскладку).

Разработав схему размещения, осталось взять дефолтную раскладку и ее модифицировать. Основная часть файла раскладки (опустив ряд нюансов) выглядит так:

Key <сканкод> c<Unicode CharID> c<cp-1251 CharID>

При нажатии клаавиши со сканкодом <сканкод>, драйвер AEKmap сымитирует ввод соответствующего символа Unicode или non-Unicode. Пример:

Key 0141 c0424 c00D4 ; ShiftA -> Ф
Key 0041 c0444 c00F4 ; A -> ф

Для определения сканкодов в комплект AEKmap входит утилита AEKmap Scan, запустив которую на смартфоне можно увидеть сканкоды кнопок и всех модификаторов (Shift, Win, etc). Я обратил внимание, что если скан-код клавиши (скажем G) будет 0047, то Shift+G = 0147, Win+G = 0847 и Win+Shift+G = 0947 (на самом деле так и есть - первый байт используется для битов модификаторов Ctrl, Alt, Win, etc) - это несколько сократит время, потраченное на вычисление скан-кодов. Как выяснилось, на ES400 клавиша "fn" является аппаратной (т.е. fn+G = совсем другой скан-код) и в качестве модификатора не отлавливается. Что ж, учтем.

Для определения Char ID я использовал стандартную программку Windows под названием Character Map (Charmap.exe) - при выборе символа она показывает и Unicode код символа и обычный. Обратите внимание, что для того, чтобы отображался правильный non-Unicode код символа, необходимо выбрать кодовую страницу Windows:Cyrillic.

Локализация аппаратного ввода на устройствах с Windows Mobile / CE

Теперь, собственно, можно модифицировать раскладку. Берем стандартную раскладку Full-Size keyboard, модифицируем шапки, оставляем все основные кнопки (Q-P, A-L, Z-,) выкидываем ненужное и добавляем следующее.

Key 094F c0425 c00D5 ; Win+Shift+O -> Х
Key 084F c0445 c00F5 ; Win+O -> х
Key 094B c0416 c00C6 ; Win+Shift+K -> Ж
Key 084B c0436 c00E6 ; Win+K -> ж
и т.д. для всех кнопок.

Заливаем файл на мобильное устройство в каталог AEKmap (по умолчанию \Program Files\AEKmap\), выбираем через AEKmap Settings, проверяем, радуемся.

Потом, я решил сделать украинскую раскладку. Так как держать третью раскладку я не люблю - пришлось импровизировать и расширять русскую. Нужно добавить буквы "і, ї, ґ, є". Буква "і" идет на Win+S (туда, где "ы"), буква "ґ" - на Win+U (русская "г"), а вот с буквами "ї" и "є" - проблема - они сидят на "дополнительных" клавишах и Win уже не сработает. Тут нас выручает другая функция AEKmap (полезная для устройств с телефонной клавиатурой) - поддержка множественных нажатий клавиш. Решаем следующее: Win+P два раза - будет "ї", три раза - "Ї" (сделать Win+Shift два раза проблематично), аналогично, L будет нести на себе "є" и "Є". В файле раскладки это выглядит следующим образом:

Key2 0850 c0457 c00BF ; Win+P (2) -> ї
Key3 0850 c0407 c00AF ; Win+P (3) -> Ї
Key2 084C c0454 c00BA ; Win+L (2) -> є
Key3 084C c0404 c00AA ; Win+L (3) -> Є

Вот и все. В результате, мы получили возможность на устройстве, совершенно не подозревающем о существовании такой страны, как Украина, относительно удобно (кому неудобно - переназначьте) писать на русском и украинском языках. Правда, надо знать QWERTY на память, но те, кто много пишут - давно знают :) Итоговый файл раскладки для ознакомления выложен здесь. Понятное дело, работает это не только на устройствах Motorola, но и на любых других коммуникаторах, смартфонах и КПК под управлением Windows Mobile и CE.

Для предотвращения холиворов напишу что этот пост не посвящен обсуждению раскладок аппаратных клавиатур разных вендоров, ущербности их политики по отношению к нашей стране и ее соседям, кривизне Windows Mobile и т.д. Вопрос о аппаратного ввода мне задают на каждой второй встрече (особенно это интересно для устройств типа WT4090) - я привел подробный рецепт.

+44
голоса

Напечатать Отправить другу

Читайте также

Таки да, AEK рулит (http://ae.inc.ru/aekmapr.php), выручал не раз.

Метод хорош для консъюмерских железок, а то пойди научи грузчика раскладкам: то что ты видишь на кнопках, это не совсем то что есть на самом деле : )

Посему правильно AEK + новый оверлей с кириллицей. Ну, на ES400 оверлей не прикрепишь, а вот на тот же WT4090 вполне.

ЗЫ: AEK не работает с wavelink telnet client

Новый Wavelink TE сам поддерживает локализацию.
Для старого - есть патчи. Пока никто из заказчиков не жаловался.

Речь не об отображении (все ок), а о вводе в теленет с аппаратной клавиатуры ; )

Интересно, в AEKmaper можно настроить что б переключать раскладку с клавиатуры, а не только нажимая на метку языка?

Только так и переключаю. В AEKmap Settings есть возможность выбора сочетания для переключения раскладок.

Спасибо, Арсен, очень полезная статья. Сам недавно бился с кривой локализацией аппаратной клавиатуры на коммуникаторе.

Потом снес ОЕМ драйвер клавиатуры и заменил его стандартным (благо его не выкинули из прошивки производители) и о счастье заработали правильно все буковы. И самое забавное работает даже на аппаратной клавиатуре подключенной по USB.

Производитель коммуникатора Toshiba, т.к. Motorola для пользовательского рынка давно не продавала в Украине ничего хорошего на WM.

Linux is like a wigwam - no windows, no gates, aрache inside!

Упоминание OEM-драйверов напомнило собственный казус. У меня в Windows 7 при установленном "правильном" драйвере звуковухи громкость раза в два ниже, чем при Generic драйвере :)

 
 
IDC
Реклама

  •  Home  •  Рынок  •  ИТ-директор  •  CloudComputing  •  Hard  •  Soft  •  Сети  •  Безопасность  •  Наука  •  IoT