Мне было поручено отправить данные с 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. Данные могут содержать изображение и т.д.
Для собственного приложения 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