You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:09:01