【发布时间】:2019-10-14 22:14:46
【问题描述】:
我正在 Blueprism 中的一个小项目上工作,在 mspaint.exe 上绘制一些示意图。 由于 BP 允许我们在类似的附加应用程序之间切换,我想从 mspaint 的第一个窗口切换到第二个窗口。 但是由于两者都没有以任何文件名保存,因此两者的窗口文本都是“无标题 - 绘画”。
在 Blueprism 中,当为一个 exe 打开多个实例时,它们都具有相同的窗口标题,无法附加到任何打开的实例。
尝试使用完全匹配或通配符匹配以及子索引选择(其中任何一个 + 导航阶段中的进程名称)进行附加,所有打开的实例都响应为真。我认为,exe(mspaint)没有给OS提供实例编号,因此BP可以识别它。
在导航阶段,给出子索引,就是给出异常:
“不止一项申请符合标准”。
如果标题相同并且无法获得子索引,那么附加窗口的常用方法是什么?有什么方法可以获取唯一的窗口句柄并使用它吗?
【问题讨论】:
-
你能为每个实例分配不同的句柄吗?
-
窗口句柄本身不能通过 BP 获得。我们可以通过 Memory stats 获取集合中任何特定运行进程(它的所有实例)的 PID,这是我能想到的最接近和最好的方法。但是我们不能在附加时使用它,因为窗口文本是我们唯一可以在那里使用的东西。
-
您可以编写一个代码阶段来为您的应用程序的每个实例提取单独的窗口句柄,并根据需要使用另一个通过句柄激活窗口。或者,在您打开每个实例时使用名称将文件保存在 Paint 中,并在完成后删除文件 - 这将使窗口标题不同,以便您能够在它们之间切换......
-
@Dave,OK 将尝试在代码阶段工作 - 如果我能像这样得到它会很棒,所以需要在 C# 中进行一些研发。是的,保存和获得标题是我现在正在做的事情。另外,由于 PID 已经在 BP 中可用,是否可以自定义代码以使用 PID 本身进行附加,会容易得多,对吧?