Windows ce вызвать клавиатуру

Обновлено: 06.07.2024

Проблема, которая заставила меня написать данную статью, возникла при внедрении функционала в розничные магазины, который предполагает ввод некоторых данных. Исходные данные, сенсорный POS-Теринал, ОС Windows 10, Розница 1.0(Не имеет значения). Сенсор на POS-Терминалах не поддерживает мультитач и работает как обычная мышка. Попытки перевести систему в режим планшета и использовать сенсорную клавиатуру стандартными методами не увенчались успехом, клавиатура не появляется при активации поля ввода, плюс для не мультитач экранов режим планшета, это редкостное извращение. Информации по альтернативным способам работы с сенсорной клавиатурой найдено не было, поэтому пришлось изобретать велосипед.

Решение

И так, в обычном режиме сенсорная клавиатура не доступна и есть возможность использовать лишь экранную клавиатуру, которая в свою очередь менее удобна и так же не подразумевает свое появление при активации поля и закрыв ее придется что-то придумывать, чтобы она опять появилась (на самом деле не что-то, а можно просто выполнить команду osk.exe, экранная клавиатура появиться на экране).


Для того чтобы сенсорная клавиатура запустилась в обычном режиме нужно лишь запустить фоновый процесс:

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

Итоги

Кому это может быть полезно, сейчас в связи с законом ФЗ-54, на кассовых местах может потребоваться ввод адреса электронной почты, я специально опускаю ввод телефона, так как с цифровой клавиатурой особых проблем нет, это решение можно добавить во внешние обработки для работы с кассовыми аппаратами, так же такой способ ввода может упростить жизнь, если требуется заполнять какие-то данные по клиенту на кассовом месте.

Скажу честно, мы не ввели данный функционал в эксплуатацию и не факт, что введем, у нас не запущен процесс explorer на моноблоках, что не позволяет задействовать сенсорную клавиатуру. Будем думать, что нам важнее. Исходники компоненты, выкладывать не буду, так как они делались для теста и не несут, какой-то нужной информации, кому очень захочется пишите в ЛС вышлю без вопросов. В архиве готовая библиотека и тестовая обработка, основные моменты описаны в статье. Надеюсь кому-то это пригодится.

Интернет на WinCE-магнитоле через USB-модем (отчет)

CD, MP3, DVD, магнитолы, мониторы, подбор компонентов и прочее связанное с автозвуком.

Интернет на WinCE-магнитоле через USB-модем (отчет)

ЗАДАЧА: чтобы на экране магнитолы в навигаторе отображались пробки, а стоя в этих пробках успевать проверять электронную почту, да почитывать анекдоты.

УСЛОВИЯ: китайская 2-din магнитола на базе Win CE 6.0 с полноценным USB-входом (в конкретном случае – магнитола «RoadRover» для LancerX с двумя USB-входами выведенными в бардачок).


ЭТАПЫ РЕШЕНИЯ:
0. Разлочка магнитолы или как выйти в настройки Win CE:
Берем файловый менеджер Total Commander для WinCE (TC), копируем его на Flash/SD/MMC-карту и запускаем файл "CECMD.exe" прямо на магнитоле:
[ ссылка на изображение ]
Дальше рекомендую запустить «Панель задач» (\Windows\explorer.exe), чтобы получить доступ к кнопке «Start» и к экранной клавиатуре (на Панели задач после часов крайняя правая кнопка с иероглифами). Теперь «Панель задач» настроим: «Start» – «Setting» – «Taskbar and Start Menu…», в открывшемся окне поставьте галочку напротив «Always on top» и снимите возле «Auto hide». Иначе Панель задач исчезает через несколько секунд и больше не появляется до перезагрузки магнитолы.
Теперь, для тонкой настройки WinCE, мы можем смело и легко входить «Панель управления» («Control Panel») прямо через кнопку «Start».

1. Выбираем модем и ищем драйвер:
Как-то где-то прочитал, что модем HUAWEI E1550 (E150) точно работает с WinCE. Поэтому целенаправленно искал именно эту модель, чего и Вам советую. Дабы сэкономит – берите модем, золоченный под сотового оператора. Последний недостаток легко исправляется этой программой – введите в нее IMEI модема (под сим-картой – не перепутайте с серийником), в ответ получите два кода, из которых второй (Desbloque) будет кодом разблокировки. Установив в компьютер модем с чужой сим-картой, на вопрос о разблокировке нужно ввести полученный код.
Теперь скачиваем драйвер для модема под WinCE , разархивируем и, посредством флэшки и TotalCommandera, копируем в надежное место памяти магнитолы. У меня он лег по адресу: \StaticStore\usbser.dll. Будьте внимательны – при перезапуске магнитолы из большинства системных папок WinCE лишние файлы и/или каталоги удаляются без предупреждения. Поэтому лучше сразу проверить сохранится ли драйвер в том месте, куда Вы его скопировали если магнитолу выключить/включить.

2. Настройка модема:
Предупреждение: на всех симках, устанавливаемых в модем, лучше сразу отключать режим проверки PIN-кода (например, через сотовый телефон). Я не проверял, но есть подозрение, что через WinCE сделать это не возможно и модем работать не будет.

2.2. Идем к магнитоле:
Теперь можно втыкать UBS-модем в магнитолу (не забудьте перед этим на ней запустить TC и «Панель задач»!). WinCE определит новое устройство и спросит драйверы для его работы – в соответствующем поле вводим выбранное нами местоположение и имя драйвера (в моем случае: \StaticStore\usbser.dll (в начале строки вводится слеш!)). Вот и всё. Можно попробовать вынуть модем и опять установить, выключить магнитолу и включить – если всё нормально, то вопросы о драйвере больше задаваться не будут.

3. Ковыряем реестр WinCE.
Рекомендую также воспользоваться Total Commanderом. В нем уже имеется плагин для работы с реестром.

3.1. Чтобы использовать в магнитоле модем одновременно в качестве кард-ридера для MicroSD, нужно изменить название в ветке:
[HKLM\Drivers\USB\LoadClients\4817_4097\Default\Defaul\USBSER_CLASS]
на:
[HKLM\Drivers\USB\LoadClients\4817_4097\Default\255\USBSER_CLASS]
Всё. Теперь перезапустите магнитолу и проверьте работу кард-ридера.

3.3. Теперь наш путь лежит к ветке: [HKLM\ExtModems\]. Это т.н. «встроенные» модемы, которые знают, как взаимодействовать Вашему модему с системой:
[ ссылка на изображение ]
Т.к. есть определенные противоречия в найденной мной информации, то двум «встроенным модемам» из этого списка пропишем порт, на котором определился Ваш модем. По одной информации, порт нужно указать в ветке «[HKLM\ExtModems\HayesCompat]» (менять номер порта в соответствующей строке «Port»). Но у меня заработал другой «встроенный модем» - поэтому туже строчку поправьте и в ветке «[HKLM\ExtModems\QCMODEM]».

4. Настраиваем на WinCE доступ к интернету. Крепитесь, осталось немного.

4.2. Теперь нажимаем кнопку «Configure…» и сверяйте настройки с нижеприведенными рисунками:
[ ссылка на изображение ] [ ссылка на изображение ]
Здесь «поиграть» придется с последней строчкой «Extra Settings» (или еще называется «строка инициализации модема»). Во-первых, в ней все данные вводятся без пробелов! Во-вторых, строка зависит от оператора и вашего местонахождения.
Для МТС она может выглядеть так: AT+CGDCONT=1,"IP","internet.mts.ru" или без первоначального «AT»: +CGDCONT=1,"IP","internet.mts.ru"
У меня заработал второй вариант.
Для МегаФона она выглядит так: AT+CGDCONT=1,"IP","internet" или соответственно, так: +CGDCONT=1,"IP","internet"
С этим оператором у меня заработал первый вариант.

5. Можете подключаться к интернету.

Адаптер клавиатуры представляет собой устройство для подключения к компьютерам с операционной системой WinCE и Psion стандартной полноразмерной клавиатуры. Адаптер эмулирует собой клавиатуру Newton Keyboard, для которой есть драйверы под все типы применяемых процессоров (Alpha, MIPS, SH3).

Подключение к WinCE

Для подключения адаптера к КПК необходим сериальный кабель или кредл. Адаптер также имеет возможность передачи по интерфейсу SIR, однако мне неизвестно, можно ли заставить WinCE и EPOC принимать данные в этом режиме. Если кто-то из пользователей знает, как это сделать - прошу сообщить мне.

Подключение через сериальный кабель сложностей не вызывает. Адаптер использует только 2 сигнала - TXD и RXD. Уровни сигналов соответствуют стандарту RS-232 (+- 10 V). Скорость обмена составляет 9600 bps.

Драйверы

Для каждой из платформ необходим свой собственный драйвер. Ниже находятся некоторые ссылки:

Программа Тип компьютера Тип процессора
Uniboard WinCE, PocketPC MIPS, ARM
NewtonKey WinCE, PocketPC MIPS, ARM, SH3
U-Key WinCE MIPS, SH3
iBizKbd WinCE MIPS, ARM, SH3
GoType for Casio WinCE -
Newton KBD driver Psion -

Питание устройства

Питание адаптера может осуществляться от любого внешнего источника с напряжением от 6 до 15 вольт. Это может быть батарейка "Крона", 4 элемента "AA" или любой подходящий источник питания от бытовой электроники. Потребляемый самим адаптером ток не превышает 5 мА. Следует также учесть ток, потребляемый клавиатурой - у разных моделей он может сильно различаться.

Для моделей с инфракрасным диодом имеется несколько режимов мощности - малый, средний и большой. Режимы с пониженной мощностью позволяют экономить энергию батарейки. Можно также совсем отключить инфракрасную передачу. Это делается с помощью "горячих клавиш":

  • Alt-F1: режим 30% мощности
  • Alt-F2: режим 70% мощности
  • Alt-F3: режим 100% мощности
  • Alt-F5: светодиод отключен

Основное внимание следует обратить на полярность напряжения на разъеме источника. В случае неправильной полярности возможен выход из строя адаптера (маловероятно) или источника питания (прецеденты есть).

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

Схема и прошивка

Для желающих самостоятельно изготовить подобный адаптер - схема в формате Visio или GIF и прошивка в формате HEX. Только для некоммерческого использования!



Keysight DSOX1102G

Осциллограф должен иметь в своём арсенале любой уважающий себя энтузиаст-электронщик. Осциллографы, кратко говоря, позволяют вам изучать волны электрических сигналов в контуре, а цифровые осциллографы (digital storage oscilloscope, DSO) незаменимы тем, что могут найти редкие ошибки в сигнале, которые не распознает аналоговый осциллограф или мультиметр.

Тема моей статьи — DSOX1102G от компании Keysight Technologies (бывш. Agilent), из их недорогой линейки осциллографов, отличающихся неплохим соотношением цены к качеству по сравнению с продукцией конкурентов. Как и большинство их осциллографов, на этой модели работает встроенная ОС Windows Embedded CE 6.0 (также известная, как Windows CE или WinCE), но, как и в большинстве случаев применения WinCE, её интерфейс вы практически никогда не видите – он спрятан за специально сделанным интерфейсом для пользователя.

Этап 1: пробуждение

Когда в начале 2017 была запущена серия Keysight 1000-X, один из обзорщиков с Hackaday заметил, что способ сохранения данных на этих осциллографах иногда приводил к их падению и перезагрузке, и отметил, что перед загрузкой на экране на несколько секунд можно было увидеть указатель мыши. В его посте была гифка, где он сохраняет файл, вызывающий падение, и я заметил нечто странное на одном из кадров анимации – там можно было различить панель задач Windows сразу перед чёрным экраном с ошибкой. Интересненько.


Выиграв свой осциллограф благодаря конкурсу Scope Month от Keysight, пару месяцев я не думал об этом, пока не наткнулся на экран с отказом самостоятельно. В моём случае я обнаружил, что заголовок Windows CE был виден поверх обработчика отказов осциллографа; перетаскивание заголовка оставляло за собой след, и в итоге подвешивало WinCE. Такое случалось очень редко, поэтому, наткнувшись на отказы впоследствии, я просто позволил обработчику просканировать файловую систему и перезагрузить ОС.

Однако меня это заинтриговало, и я хотел узнать большое о том, что происходит с лежащей в основе системы WinCE. Я обнаружил, что USB-порт осциллографа довольно чувствителен к ошибкам, и простое шатание флэшки в порту может привести к аварийному сбою. Однако этого было недостаточно для сбора нужного количества информации, поскольку это был ненадёжный метод.

Так начались мои поиски доступа к рабочему столу WinCE.

Этап 2: заглянем поглубже

Из-за своего любопытства однажды я решил посмотреть, сможет ли осциллограф считывать и записывать дискеты на 3,5" (или, как говорит молодёжь, распечатанную иконку сохранения) через USB-порт – и он смог! Однако я заметил одну странную проблему; осциллограф аварийно завершал работу, если я оставлял дисковод в USB-порту при включении. Эврика! Я нашёл способ надёжно вызывать аварийный отказ.

Тут, к несчастью, меня поджидало второе серьёзное препятствие. Этот отказ при загрузке происходил, только если в USB-порт было включено единственное устройство — дисковод. Отказа не было, если я использовал USB-хаб, в который включал дисковод. Это означало, что мне придётся очень быстро переключаться между дисководом и USB мышью с клавиатурой. Спешка с целью как можно быстрее вынуть дисковод и воткнуть комбинацию из клавиатуры и тачпада в USB в процессе загрузки была утомительной и раздражающей. Мне нужно было решение получше – железячное решение.



Специальный переключатель A/B для USB, сделанный мною для быстрой замены устройств

Использовав старый USB-кабель, дохлый USB-хаб и DPDT-переключатель, я создал переключатель USB A/B, чтобы упростить и ускорить процесс переключения между устройствами. При помощи этого метода мне удалось попытаться установить контакт с ОС WinCE на долю секунды, пока панель задач была видимой на экране, и до тех пор, пока обработчик отказов не сломал мне всю малину. При помощи магии, заключённой в замедленной съёмке моего Samsung Galaxy S9, я смог определить, что могу отправлять последовательности нажатий клавиш в WinCE и она их обрабатывает – даже на заставке системы! Я смог получить информацию о системе, вслепую нажимая клавиши, и потом изучая отклик при аварийном отказе ПО осциллографа. Тут я столкнулся со вторым препятствием.

Возможность очень краткого взаимодействия с WinCE – это хорошо, но она была бесполезной, поскольку я не мог взять над ней управление до тех пор, пока обработчик отказов перезагрузит систему. Обработчик крепко держался за ОС, и никакая долбёжка по клавиатуре и Ctrl+Alt+Delete не пускали меня обратно в WinCE.

Этап 3: ищем точку опоры

И снова моё периодически играющее любопытство пригодилось, когда я решил использовать свой старый Sony Clie PEG-NX73V (наладонник на PalmOS от 2003 года) в качестве USB-привода. У него была функция импорта данных, позволявшая перетаскивать файлы на карту памяти точно так же, как на съёмный диск.

Точно так же, как и в случае с USB-дисководом, произошёл отказ системы, когда я включил осциллограф, не вытащив PDA. Однако на этот раз обработчик отказов решил, что файловая система PDA – это повреждённый раздел прошивки, и предложил загрузить обновление прошивки с внешней USB-флэшки.


Это поведение не было регулярным, иногда ПО осциллографа всё равно загружалось, и появлялось очень странное окно из WinCE с ярко-голубым указателем мыши, оставлявшим следы на экране. Однако в этом странном состоянии мне удалось оттащить окно ПО осциллографа InfiniiVision в сторону, и я попытался потыкаться с ОС. Но ПО осциллографа вело себя очень агрессивно и возвращало себе фокус каждый раз после клика вне окна. После некоторой возни со странно раскрашенной ОС я смог обойти её. Я не мог просмотреть файловую систему, поскольку не получалось надолго забирать управление от окна ПО осциллографа, но я смог вызвать диалоговое окно свойств системы, где было написано, что осциллограф основан на Windows CE 6.00, и у него есть 100 Мб RAM.


Затем я решил порыться на форумах EEVblog, где люди активно пытаются хакнуть осциллограф, чтобы открыть дополнительные возможности. Там я обнаружил, что ПО ищет файл infiniiVisionStartupOverride.txt в корне USB-флэшки, и если находит, то пытается загрузить с неё ПО осциллографа. И хотя, судя по всему, на самом деле прошивка не загружала ПО с флэшки, этот процесс прервал запуск ПО осциллографа, и тогда уже никто не забирал у меня управление ОС. С этого момента всё стало интереснее – обработчик отказов открывал окно Проводника, и введя в поле для имени файла "*.*", я смог начать рыться в файловой системе осциллографа и USB-флэшки! Именно это мне и было нужно для получения контроля над WinCE. Однако, я встретил очередное препятствие: осциллограф перезагружался через 60 секунд, из-за чего у меня не было много времени на рытьё в операционной системе.



Запрос на обновление прошивки DSOX1102G с диалогом выбора файла с флэшки



Менеджер задач Windows CE показывает запущенные процессы на экране восстановления прошивки

Скопировав несколько инструментов Windows CE, например, Windows CE Task Manager, я заметил два интересных процесса, которые были запущены, когда обработчик отказов ещё был виден — recoverInfiniiVision.exe и processStartupFolder.exe; судя по всему, первый был обработчиком отказов, не дававший мне доступ к WinCE после аварийного отказа ПО осциллографа. Прибив второй процесс при помощи iTaskMgr (бесплатная версия менеджера задач WinCE не даёт убивать процессы) я смог удержать осциллограф от перезагрузок, а прибив первый, я увидел чистый рабочий стол WinCE – и вот я внутри! К несчастью, мне не удалось восстановить панель задач, из-за чего ориентироваться в ОС было довольно неудобно.

Я создал на рабочем столе новую папку, чтобы открыть Проводник, и, наконец, смог заняться изучением файловой системы осциллографа. Этому очень помогла программа Total Commander/CE, имеющая встроенный текстовый редактор, которого не было в данной версии WinCE.



Копаясь в файловой системе при помощи Total Commander/CE (пока никакой панели задач)

Этап 4: полный контроль

Теперь, сумев добраться до небесно-голубого рабочего стола, для полноценного ощущения WinCE я должен был восстановить панель задач. Погуглив, полазав по Stack Overflow, я накидал небольшую программу для этого. Открыв её из Проводника, я получил полную версию рабочего стола WinCE! Наконец у меня был полный контроль над базовой ОС!



Свобода – полноценный рабочий стол WinCE на осциллографе!

С этого момента я начал рыться в файловой системе и смотреть, какие интересные инструменты там можно найти. Интерпретатор командной строки не хотел запускаться, однако я покопался в реестре и нашёл ключ HKEY_LOCAL_MACHINE\Drivers\Console\OutputTo, значение которого было 0xFFFFFFFF. Поменяв его на 0, я сумел сделать Command Prompt видимым на рабочем столе, поэтому я сделал ещё одну небольшую программу, которая занималась именно этим.

Всё шло хорошо, я сделал командный файл со всеми командами, необходимыми для того, чтобы убивать ПО осциллографа, обработчик стартовой папки, обработчик отказов, восстанавливать панель задач и разрешать запуск Command Prompt. Однако для открытия меню обработчика отказов требовался мой PDA, а это означало, что другие не смогут воспроизвести такой эффект.

Покопавшись дальше, я обнаружил, что как только появлялась заставка и начинали мигать светодиоды на панели, WinCE начинала обрабатывать нажатия клавиш даже без устройства, ронявшего ПО. Нажатие win+U подвешивало осциллограф, поскольку этим я открывал меню Пуск и выбирал опцию Suspend (и у ОС не было возможности вернуть после этого контроль, поскольку у осциллографа была только кнопка выключения питания). Помня это, я переименовал свой файл в a.bat, чтобы его имя было проще набирать, и попытался запускать его при загрузке через win+R, команду \usb\a.bat и нажатия Enter. Но осциллограф в результате просто показывал заставку на экране, хотя в фоне WinCE была жива, и я просто не мог видеть, что там происходит. Оказывается, что обработчик отказов был необходимым компонентом для демонстрации рабочего стола ОС, и мне нужно было просто добавить в командный файл несколько строчек для запуска и последующей остановки обработчика отказов. Добавив эти последние штрихи, я смог (полуавтоматически) загружать осциллограф прямо до появления рабочего стола, используя только USB-флэшку, мышь и клавиатуру!

Этап 4: Да, на нём запускается DOOM!

Получив доступ к WinCE, я смог, наконец, ответить на вопрос: «Запускается ли на нём Doom?» И, как оказалось, реально запускается! После запуска осциллографа на это ушло полтора года, но до этой вехи я, наконец, дошёл.



Это не обман: на осциллографе Keysight 1000 X можно запустить Doom!



Doom II работает на моём осциллографе DSOX1102G! (3 кадра в секунду)



Запуск Doom в окошке размером 320×240 позволило выжать достаточно кадров в секунду для игры. Посмотрите, какая палитра цветов!

В следующей статье я ещё немного поиграюсь с этой легендарной видеоигрой на железяке, которая никогда не предназначалась для игр.


Doom в действии в разрешении 320×240, 256 цветов! На осциллографе!

Файлы для скачивания

Я выложил файлы, которые могут вам понадобиться для того, чтобы попробовать то же самое на своём осциллографе – но учтите, я не отвечаю за его превращение в кирпич или что-то ещё неприятное! Я проверял всё это только на своём DSOX1102G, но подозреваю, что другие модели серии 1000 X и другие осциллографы от Keysight, обладающие функцией восстановления прошивки, тоже могут сработать. Прошивка осциллографа сделана так, что вся WinCE запускается в оперативной памяти и не сохраняется после перезагрузки, поэтому все изменения в ОС, ломающие систему, не превратят осциллограф в кирпич (файлы с прошивкой лежат в директориях NAND-флэшки, которые нельзя открыть через Проводник, а можно лишь набрать по имени).

Флэшку необходимо будет отформатировать в FAT или FAT32, и распаковать в её корень zip-архив Scope Liberator. Инструкции содержатся в readme.txt.

Если вам интересен исходный код вспомогательных программ, которые возвращают панель задач и интерпретатор командной строки, я их тоже выложил.

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