Окно CE 4.2 - Перечисление через элементы управления другого запущенного процесса

1

Мне было поручено отправить данные с COM 1 на COM 2 в Windows CE 4.2. Запущенное приложение принимает данные из COM 1 и отображает его пользователю в форме (текстовое поле, которое я предполагаю). Затем я должен взять эти данные и отправить их COM 2. COM 1 используется программой, отображающей данные, и я не знаю, как захватить COM 1.

Я считаю, что попытка сделать лоскут экрана станет следующим шагом. К сожалению, это компактная структура и старая версия, и из многих исследований кажется, что управляемый код не может быть и речи. Многие из функций API, которые я буду использовать, недоступны; Например, FindWindowEx.

Вот где я сейчас. Я создал два проекта. Один работает с TextBox и некоторыми формулировками. Выполняется отдельное приложение и пытается прочитать текст в этом текстовом поле. Мне удалось найти текущий процесс, основанный на имени формы, используя FindWindow API. Используя код, который я нашел на этом сайте, я даже смог перечислить элементы управления формы. Однако мой TextBox никогда не найден и многие элементы управления, которые находятся там, где они никогда не помещаются в форму (listbox, button). Я предполагаю, что это форма начального контроля.

У кого-нибудь есть опыт? В настоящее время это находится на С#, но VB или Visual C++ будут в порядке. Даже если у вас есть идеи по стороннему приложению. BTW Мне не дана возможность перейти на более высокую версию компактной рамки.

Спасибо.

Обновление, о котором я только что узнал. Это не похоже на то, что я только просматриваю только новые данные, но вместо этого нужно очистить весь экран и отправить его COM2. Кто-то сканирует штрих-код, и я пошлю все данные экрана через COM2. Данные могут содержать изображение и т.д.

  • 0
    Предлагает ли существующее приложение, которое в настоящее время использует COM1, возможность настроить его для использования другого COM-порта, или оно жестко запрограммировано для COM1?
  • 0
    TE2000 предлагает возможность смены COM-портов, но в этом случае это требование к оборудованию.
Теги:
winapi
compact-framework
windows-ce

1 ответ

1

Для собственного приложения C у меня есть один sceleton, который перечисляет все дочерние окна и элементы управления внутри диалогового окна: http://code.google.com/p/rdp-auto-login/source/browse/trunk/rdp-auto-login/tscDialog.cpp. См. ScanTSCWindow и результаты, найденные в комментарии "Элементы диалога TSC".

Я начал с удаленного шпиона и посмотрел через окно RDM, чтобы найти значения CtrlID. Существует также хороший инструмент под названием zDump (http://www.hjgode.de/wp/2009/06/11/zdump-take-a-look-inside-windows-ce/), который работает на устройстве и позволяет вам посмотрите на элементы окна.

Теория состоит в том, что каждый элемент в Windows (мобильный или рабочий стол) - это окно. Окно доступно там оконной ручкой. Ручка назначается ОС во время CreateWindow/Ex. Внутри диалоговых окон элементы можно идентифицировать с помощью идентификатора элемента управления (значения ресурса), класса окна (например, "EDIT", "LISTBOX") и текста окна и внутренне с помощью дескриптора окна при создании.

Проблема с приложениями Compact Framework заключается в том, что они скрывают многие из этих основ, а элементы диалога (Form) не могут быть легко идентифицированы из другого процесса.

Как вы говорите, вы не можете захватить COM1, что, если вы остановите приложение, а затем откройте COM1? Как knonw, обычно на одном приложении можно одновременно получить доступ к последовательному порту. Затем вы можете напрямую прочитать последовательные данные и не нуждаться в доступе к внешнему окну. Существуют также драйверы, которые обеспечивают зеркалирование портов или множественный доступ. Даже для ОС Windows CE (например, http://www.virtual-serial-port.org/products/serial-splitter-mobile/).

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

Вы говорите: "Мне поручено отправить данные с COM 1 на COM 2 в Windows CE 4.2. Запустившееся приложение принимает данные из COM 1 и отображает его пользователю в форме (текстовое поле, которое я предполагаю). взять эти данные и отправить их COM 2. COM 1 используется программой, отображающей данные, и я не знаю, как заблокировать COM 1. " и если вы не запустите другое приложение, вы можете написать свой собственный и не нужно разбирать чужое приложение.

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

EDIT/UPDATE:

как мы теперь знаем, Intermec TE2000 (эмуляция терминала) ответ заключается в использовании интерфейса XMLRPC, предоставляемого TE2000. Интерфейс способен вызвать функцию, размещенную сервером xmlrpc, и отправлять все содержимое экрана (текст, поля и атрибуты) при изменении экрана. У меня есть рабочий код c++ stl windowsce для этого. Если устройство подключено через сеть, сервер xmlrpc может работать даже на ПК.

Поскольку TE2000 действительно использует собственный API-интерфейс drwastring, вам не удастся прочитать тексты из окна. Если вы закроете окно, вам нужно будет сделать OCR на изображении. XMLRPC действительно избегает всего этого.

UPDATE2:

Я закончил класс lib, чтобы получить обновления асинхронного экрана с использованием TE2000 xmlrpc: см. Https://github.com/hjgode/ITE_xml_rpc/tree/master/XmlRpcCS/XmlRpcCF и http://community.intermec.com/t5/Thin-Client -На-разработка/Полиграфические CV60-Screen-Windows-CE-4-2/тр/28663/выделить/ложь # M473

  • 0
    Большое спасибо за ваш ответ, Джозеф. Я посмотрю на все, что вы упомянули.
  • 0
    Я не буду контролировать программу (эмулятор терминала), которая использует COM1, и она должна работать постоянно. Серийный сплиттер определенно был бы подходящим вариантом, если бы он работал так, как я надеюсь. Я создал два приложения только для целей тестирования, чтобы посмотреть, смогу ли я даже перечислить элементы управления со старой компактной структурой. В конечном продукте я должен либо прочитать COM 1 с эмулятором терминала во время его работы (и с помощью COM 1), либо очистить экран для поиска новых данных и отправить его из COM 2.
Показать ещё 10 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню