0

需要将鼠标坐标转换为主机模拟器上的PS位置或行列。

我正在使用 Whllapi 连接和自动化大型机模拟器。当用户移动鼠标或单击模拟器屏幕上的字段时,我需要找到一个基础字段。要识别大型机模拟器上的字段,我需要知道行和列或 PS 位置。我需要将鼠标位置(以像素为单位)转换为模拟器行和列。但是 whllapi 中没有提供此类功能的 API。

我使用 whllapi api“QueryWindowCoordinates”和“WindowStatus”来获取模拟器窗口坐标和窗口 hwnd。我在窗口 API“SreenToCleint”中使用该句柄来获取鼠标相对于模拟器窗口的位置。但我无法翻译这些共同坐标到模拟器行和列。我尝试了很多算法,但无法获得一致的结果。我需要将鼠标位置精确地转换为 PS 位置。Whllap 文档提到了“WindowStatus”api 来返回 x 和 y 的字体大小,但我无法从 Rumba 模拟器中检索任何值。为了获得喜欢的高度和宽度,我还尝试了 window api 'GetTextMetrcies' 但这也没有多大帮助。

4

1 回答 1

0

IBM Personal Communications for Windows 提供“获取鼠标输入”DDE 函数,当用户单击鼠标时,该函数返回 PS 位置数据(行、列)。还有另一个 DDE 函数,设置鼠标拦截条件,用于确定应该拦截哪些鼠标点击(左、右、中、单、双等)。我没有看到使用 DDE 函数捕获鼠标移动的直接方法,但如果您生成模拟的、速率受限的鼠标点击并且仅当鼠标指针在模拟器窗口内移动。

也许伦巴提供类似的功能?Rumba 显然有一些 DDE 功能,但我没有找到任何在线公开可用的 Rumba 的 DDE 功能参考。

一个可能的警告是 DDE 函数是 32 位的(并且仍然支持 16 位函数,因为仍然有一些 16 位代码在 32 位 Windows 上运行)。如果您正在执行 64 位 Windows 编程,您可以使用 32 位函数,但如果您还没有,当然您需要知道如何执行此操作。另一个需要注意的是,您可能应该测试您所做的一切以确保用户可访问性,例如使用帮助视力受损用户的屏幕阅读工具。

另一种可能的方法是将整个仿真器嵌入到您自己的“包装”应用程序中,因为这可能会给您更多的编程能力和控制权。IBM 提供 ActiveX/OLE 样式的嵌入和 Java 样式的嵌入(它们的“主机访问类库”,即 HACL)。伦巴可能会提供大致相似的东西。

另一种可能的方法是将与这些应用程序的交互转向 API,并支持全新的、更便携的用户界面,通常是 Web 和移动界面。有无数种方法可以做到这一点。如果您仍然需要终端 (3270) 驱动的自动化——可能是因为应用程序源代码丢失或者很难为其创建有用的 API?——有多种方法可以将自动化转移到后端。例如,CICS Transaction Server for z/OS 带有多种终端自动化技术作为标准包含的特性。在 IBM 的 CICS 知识中心中查找对“3270 桥”和“FEPI”的引用,以探索该范围的选择。

于 2019-10-15T09:37:48.263 回答