Groovy语言在RPA Express中关闭应用与切换窗口操作咨询
问题1:终止已启动的应用进程
你启动进程后拿到的Process对象本身就提供了终止方法,要实现脚本退出时自动清理进程,可以用以下两种方案:
- 方案1:脚本逻辑执行结束后主动调用销毁方法
// 你的业务逻辑执行完成后执行以下代码 if (process.isAlive()) { // 先尝试正常销毁 process.destroy() // 等待1秒确认进程退出,若还存活则强制销毁 if (!process.waitFor(1, java.util.concurrent.TimeUnit.SECONDS)) { process.destroyForcibly() } }
- 方案2:注册JVM关闭钩子,不管脚本是正常结束还是异常中断,都会自动销毁进程
// 进程启动后立即注册钩子 Runtime.getRuntime().addShutdownHook(new Thread({ -> if (process.isAlive()) { process.destroy() process.waitFor(1, java.util.concurrent.TimeUnit.SECONDS) if (process.isAlive()) { process.destroyForcibly() } } }))
问题2:切换到应用窗口并保持聚焦
在RPA Express环境下有两种实现方式:
- 方案1:直接使用RPA Express自带的内置动作(无需编码,更稳定)
你可以在流程中添加激活窗口组件,通过匹配进程名、窗口标题关键词定位到你启动的应用窗口,组件会自动将窗口前置聚焦。如果需要定时确保窗口不被遮挡,可以把该组件放在循环模块中,按固定间隔执行激活逻辑。 - 方案2:纯Groovy代码实现(需要依赖Windows系统API,仅适用于Windows平台)
通过JNA调用系统user32.dll的窗口操作接口实现,示例代码如下:
import com.sun.jna.Native import com.sun.jna.platform.win32.User32 import com.sun.jna.platform.win32.WinDef.HWND // 替换为你启动应用的窗口标题关键词 def windowTitle = "你的应用窗口标题" User32 user32 = User32.INSTANCE HWND hwnd = user32.FindWindow(null, windowTitle) if (hwnd != null) { // 最小化后恢复,避免某些窗口无法前置的问题 user32.ShowWindow(hwnd, User32.SW_RESTORE) user32.SetForegroundWindow(hwnd) }
注:如果不知道窗口的准确标题,可以先手动打开应用,用系统的任务管理器或者窗口探测工具查看对应窗口的标题文本
内容的提问来源于stack exchange,提问作者Raffe
相关产品推荐
相关产品推荐

