与我同在,因为这个问题有点复杂。
当用户在IBM Personal Communications(PCOMM)UI中选择文本块时,如何访问使用代码选择的文本的属性?
用户已从行 02 ,列 17 到行 02 列 66 中选择了文本。
但是光标(我可以通过API访问)位于行 15 列 26 。
我可以通过以下方式访问.NET / COM互操作API:
using AutOIATypeLibrary;
using AutPSTypeLibrary;
如何获取用户选择的详细信息,即从{02,17}到{02,66}?
答案 0 :(得分:1)
这绝对是一项艰巨的任务,但如果您确实需要这样做,这并非不可能。
除非您可以说服PCOMM支持团队为您提供一个API(或可能存在但隐藏的API),否则您尝试执行的操作可以通过以下两种方法之一进行。
“强力”方法将需要询问屏幕上的对象堆栈,以找到PCOMM绘制的矩形以显示文本选择。使用标准的Windows API调用,您可以获得其属性,包括相对于窗口的屏幕坐标。当然,问题在于这是以像素为单位,而不是3270个字符,因此您需要了解字体规格和所有相关内容,才能了解(98,123)的像素XY实际上是第2行的第16列3270显示器。有可能,但是您需要一些Windows编程技能。
第二种方法是我很久以前在类似情况下使用的方法,它依赖于PCOMM突出显示该区域以允许剪切和粘贴之类的事实。您将在代码中执行的操作是编写一些东西,然后将Windows“ COPY”命令发送到PCOMM应用程序,然后您可以读取剪贴板中捕获的内容。不能保证100%有效,但是肯定比“蛮力”方法容易得多。
最后,两种方法的混合将是在一个好的调试器下运行PCOMM,看看您是否可以找出用户选择区域并将其复制到剪贴板时使用的内部方法。在某种程度上,它确实在做您需要做的事情:用户选择一个任意区域,然后当他执行其他操作(复制到剪贴板)时,PCOMM必须将该图形区域映射到下划线的3270个字符。我敢打赌,PCOMM具有实现我的“强力”方法的代码,这些代码全部捆绑在其DLL中。如果您能弄清楚PCOMM调用什么来提取选定区域下的文本,那么就没有理由不能在您自己的代码中调用相同的东西。
如果您想走这些路,一个好的Windows调试器绝对是您的朋友...
答案 1 :(得分:0)
使用Host On Demand(您也应获得许可)代替使用PCOMM。该API是基于Java的,并且更易于浏览。