Преобразование положения мыши в пикселях в строки и столбцы (или PS) в эмуляторе мейнфрейма

Необходимо преобразовать координаты мыши в положение PS или строку и столбец на эмуляторе мейнфрейма.

Я использую Wllapi для подключения и автоматизации эмулятора мейнфрейма. Мне нужно найти базовое поле, когда пользователь перемещает мышь или щелкает поле на экране эмулятора. Чтобы идентифицировать поле в эмуляторе мэйнфрейма, мне нужно знать строку и столбец или позицию PS. Мне нужно преобразовать положение мыши (в пикселях) в строку и столбец эмулятора. Но в wllapi нет API, обеспечивающего такую ​​функциональность.

Я использовал wlllapi API «QueryWindowCoordinates» и «WindowStatus», чтобы получить координаты окна эмулятора и hwnd окна. Я использовал этот дескриптор в оконном API «SreenToCleint», чтобы получить положение мыши относительно окна эмулятора. Но я не могу перевести эти со- ординаты в строки и столбцы эмулятора. Я перепробовал много алгоритмов, но не смог получить согласованные результаты. Мне нужно точно перевести положение мыши в положение PS. В документации Wlllap упоминается API «WindowStatus», чтобы возвращать размеры шрифта для x и y, но я не могу получить любое значение из эмулятора Rumba.Чтобы получить любимую высоту и ширину, я также попробовал оконный API 'GetTextMetrcies', но это тоже не очень помогло.


person Obaid Ullah    schedule 02.10.2019    source источник
comment
Какой эмулятор вы используете?   -  person Kenny    schedule 03.10.2019
comment
По его должности - Румба.   -  person NicC    schedule 03.10.2019


Ответы (1)


IBM Personal Communications для Windows предлагает функцию DDE «Получить ввод с помощью мыши», которая возвращает данные о положении PS (строка, столбец), когда пользователь щелкает мышью. Есть еще одна функция DDE, Set Mouse Intercept Condition, чтобы установить, какие щелчки мыши (левые, правые, средние, одинарные, двойные и т. д.) должны быть перехвачены. Я не вижу прямого способа захвата простых движений мыши с помощью функций DDE, но это может быть возможно (если вы очень осторожны в своем программировании Windows), если вы генерируете симулированные щелчки мыши с ограниченной скоростью и только тогда, когда указатель мыши перемещается в пределах окна эмулятора.

Возможно, Rumba предлагает аналогичные функции? У Rumba, очевидно, есть некоторые функции DDE, но я не нашел общедоступных ссылок на функции DDE для Rumba в Интернете.

Одним из возможных предостережений является то, что функции DDE являются 32-разрядными (и 16-разрядные функции также по-прежнему поддерживаются, поскольку в 32-разрядной Windows по-прежнему выполняется некоторый 16-разрядный код). Вы можете использовать 32-битные функции, если вы программируете для 64-битной Windows, но, конечно, вам нужно знать, как это сделать, если вы еще этого не сделали. Еще одно предостережение заключается в том, что вам, вероятно, следует проверять все, что вы делаете, на доступность для пользователей, например, с помощью инструментов чтения с экрана, которые помогают пользователям с нарушениями зрения.

Другой возможный подход - встроить весь эмулятор в ваше собственное приложение-оболочку, поскольку это может дать вам больше возможностей программирования и контроля. IBM предлагает встраивание как в стиле ActiveX/OLE, так и встраивание в стиле Java (их «библиотеки классов доступа к хосту», также известные как HACL). Румба может предложить что-то очень похожее.

И еще один возможный подход — сместить взаимодействие с этими приложениями в сторону API и в пользу совершенно новых, более портативных пользовательских интерфейсов, обычно веб-интерфейсов и мобильных интерфейсов. Есть множество способов сделать это. Если вам все еще нужна автоматизация на основе терминала (3270) — может быть, потому, что исходный код приложения утерян, или по иным причинам очень сложно создать для него полезные API? - есть множество способов перенести эту автоматизацию на серверную часть. Например, CICS Transaction Server для z/OS поставляется с несколькими технологиями автоматизации терминалов в качестве стандартных функций. Найдите ссылки на «мост 3270» и «FEPI» в Центре знаний IBM для CICS, чтобы изучить этот диапазон вариантов.

person Timothy Sipples    schedule 15.10.2019