C# IBM PCOMM Emulator,通过COM/C接口访问选定文本

C# IBM PCOMM Emulator,通过COM/C接口访问选定文本,c#,com,mainframe,ibm-pcomm,C#,Com,Mainframe,Ibm Pcomm,请耐心听我说,这个问题有点复杂 当用户在IBM Personal Communications PCOMM UI中选择文本块时,如何使用代码访问他们选择的文本的属性 考虑下面的屏幕截图: 用户已从第02行第17列到第02行第66列中选择了文本 但是,我可以通过API访问的光标位于第15行第26列 我可以在以下位置访问.NET/COM互操作API: using AutOIATypeLibrary; using AutPSTypeLibrary; 如何获取用户选择的详细信息,即{02,17}到{

请耐心听我说,这个问题有点复杂

当用户在IBM Personal Communications PCOMM UI中选择文本块时,如何使用代码访问他们选择的文本的属性

考虑下面的屏幕截图:

用户已从第02行第17列到第02行第66列中选择了文本

但是,我可以通过API访问的光标位于第15行第26列

我可以在以下位置访问.NET/COM互操作API:

using AutOIATypeLibrary;
using AutPSTypeLibrary;

如何获取用户选择的详细信息,即{02,17}到{02,66}?

使用您也应该获得许可的按需主机,而不是使用PCOMM。API是基于Java的,并且更易于导航。

这肯定是一项具有挑战性的任务,但如果您真的需要这样做,这并非不可能

除非您能说服PCOMM支持团队为您提供一个可能存在但隐藏的API或文档,否则您可以通过以下两种方式之一来实现

蛮力方法需要查询屏幕上的对象堆栈,以找到PCOMM绘制的显示文本选择的矩形。使用标准的Windows API调用,可以获取其属性,包括相对于窗口的屏幕坐标。当然,问题是这是以像素为单位的,而不是3270个字符,因此您需要了解字体度量以及所有这些内容,以了解像素XY为98123实际上是3270显示中第2行第16列。这是可能的,但你需要一点很好的Windows编程技能

第二种方法是我很久以前在类似情况下使用的,它依赖于PCOMM突出显示该区域以允许剪切和粘贴等操作。您在代码中要做的是编写一些东西,将Windows COPY命令发送到PCOMM应用程序,然后您可以读取从剪贴板捕获的内容。虽然不能保证100%有效,但这肯定比暴力法容易得多

最后,这两种方法的混合是在一个好的调试器下运行PCOMM,看看当用户选择一个区域并将其复制到剪贴板时,您是否能够找出它使用的内部方法。在某种程度上,它正是您需要做的:用户选择一个任意区域,然后当他将其他动作复制到剪贴板时,PCOMM必须将该图形区域映射到下划线3270个字符。我敢打赌,PCOMM拥有实现我的暴力方法的代码,这些代码都捆绑在他们的一个DLL中。如果您能够找出PCOMM调用什么来获取所选区域下的文本,那么您没有理由不能在自己的代码中调用相同的内容


如果你想沿着这些路径走下去,一个好的Windows调试器绝对是你的朋友…

你想做的事情的目标是什么?你为什么要抓住这个?你看过Zowe项目了吗?几个VS代码插件。。。也许那个项目的开发人员能给你指出正确的方向,这很复杂。基本上,一个特定的程序有大量晦涩难懂的查找代码。新用户需要6个月的时间才能完全熟练并记住他们。我的目标是让他们选择一个查找代码,让.NET侧窗口自动从数据库中查找文本中所选查找值的含义。除了计算出用户在PCOMM中选择的行/列之外,我可以做所有的事情。看起来使用Microfocus Extra是可行的!x-treme和Reflection都有一个Selection属性,但从我所能看出,它在IBMPComm中看起来不可行。