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

Потерпи меня, так как этот вопрос немного сложен.

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

Посмотрите на скриншот ниже:

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

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

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

using AutOIATypeLibrary;
using AutPSTypeLibrary;

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

2 ответа

Решение

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

Если вы не можете убедить группу поддержки 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, безусловно, ваш друг, если вы хотите пойти по этому пути...

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

Другие вопросы по тегам