Эмулятор IBM PCOMM, доступ к выделенному тексту через интерфейс COM / C # - PullRequest
0 голосов
/ 07 марта 2019

Оставайтесь со мной, поскольку этот вопрос немного сложен.

Когда пользователь выбирает блок текста в пользовательском интерфейсе IBM Personal Communications (PCOMM), как я могу получить доступ к атрибутам текста, который они выбрали, используя код?

Рассмотрите скриншот ниже: enter image description here

Пользователь выбрал текст из строки 02 , столбец 17 в строку 02 столбец 66 .

Однако курсор (к которому я могу получить доступ через API) находится в строке 15 Столбец 26 .

Я могу получить доступ к .NET / COMAPI взаимодействия в:

using AutOIATypeLibrary;
using AutPSTypeLibrary;

Как я могу получить подробную информацию о выборе пользователя, например, от {02,17} до {02,66}?

Ответы [ 2 ]

1 голос
/ 17 мая 2019

Это определенно сложная задача, но не невозможная, если вам действительно нужно это сделать.

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

Метод "грубой силы" потребует опроса стека объектов на экране, чтобы найти прямоугольник, нарисованный PCOMM для отображения выделения текста.Используя стандартные вызовы Windows API, вы можете получить его атрибуты, включая координаты экрана относительно окна.Конечно, проблема в том, что это в пикселях, а не в 3270 символах, поэтому вам нужно понимать метрики шрифта и все такое, чтобы понять, что пиксель XY (98, 123) - это действительно строка 2, столбец 16 вдисплей 3270.Это возможно, но вам понадобится немало навыков программирования на Windows.

Метод номер два - это то, что я использовал в аналогичной ситуации давным-давно, и он основан на том факте, что PCOMM выделил эту область, чтобы разрешить такие вещи, как вырезание и вставка.Что вы будете делать в своем коде, так это написать что-то, что отправит команду Windows «COPY» в приложение PCOMM, и тогда вы сможете прочитать то, что было захвачено из буфера обмена.Не гарантированно работать на 100%, но, безусловно, это будет намного проще, чем метод "грубой силы".

Наконец, сочетание двух методов состояло бы в том, чтобы запустить PCOMM под хорошим отладчиком и посмотреть, сможете ли вы выяснить, какой внутренний метод он использует, когда пользователь выбирает область и копирует ее в буфер обмена.На каком-то уровне он делает именно то, что вам нужно: пользователь выбирает произвольную область, затем, когда он предпринимает какое-то другое действие (копирование в буфер обмена), PCOMM должен отобразить эту графическую область на подчеркивающие 3270 символов.Держу пари, что у PCOMM есть код, который реализует мой подход "грубой силы", и все это в одной из их DLL.Если вы можете выяснить, что вызывает PCOMM для извлечения текста в выбранной области, то нет никаких причин, по которым вы не можете вызвать то же самое в своем собственном коде.

Хороший отладчик Windows - определенно ваш друг, если вы хотите пойти по этим путям ...

0 голосов
/ 12 марта 2019

Вместо использования PCOMM, используйте Host On Demand (на который вы также должны иметь лицензию).API основан на Java, и с ним гораздо проще ориентироваться.

...