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

如何让Python等待Max Marking软件的“蚀刻中”提示,完成后自动关闭程序

实现方案

你可以通过以下两种常用方案检测应用内的提示状态,替代固定时长等待:

方案1:图像特征匹配(开发成本最低)

直接通过PyAutoGUI的图像识别能力判断提示是否存在,步骤如下:

  1. 启动Max Marking进入蚀刻状态时,单独截取“正在蚀刻”提示的核心区域(只保留文字部分,避免多余背景干扰识别),保存为etching_tag.png放在代码同目录
  2. 用循环持续检测该图像是否在屏幕上出现,消失后再执行后续关闭操作

修改后的代码示例:

import os
import time
import pyautogui

def engrave_task():
    os.startfile('....filepath....')
    time.sleep(2)
    pyautogui.press('f2')
    # 等待蚀刻提示出现(避免还没弹出就开始检测)
    time.sleep(1)
    # 循环检测蚀刻状态,加300秒超时兜底避免无限等待
    wait_start = time.time()
    while time.time() - wait_start < 300:
        # 检测提示是否存在,confidence参数适配轻微显示差异,需要安装opencv-python支持
        if pyautogui.locateOnScreen('etching_tag.png', confidence=0.8) is None:
            # 提示消失,雕刻完成
            break
        time.sleep(1)
    os.system('taskkill /f /im maxmarking.exe')

注:使用confidence参数需要先安装依赖:pip install opencv-python

方案2:窗口文本遍历(稳定性更高)

如果“正在蚀刻”是标准Windows控件文本,可以通过pywin32库遍历软件窗口的控件文本,无需截图适配,不受窗口位置、分辨率影响:

  1. 先安装依赖:pip install pywin32
  2. 代码示例:
import os
import time
import win32gui
import win32con

def get_window_text(hwnd):
    length = win32gui.SendMessage(hwnd, win32con.WM_GETTEXTLENGTH) + 1
    buf = win32gui.PyMakeBuffer(length)
    win32gui.SendMessage(hwnd, win32con.WM_GETTEXT, length, buf)
    return buf[:length-1].decode('gbk')

def check_etching_status():
    # 遍历所有窗口查找是否存在含“蚀刻”关键词的控件
    def callback(hwnd, res):
        if "maxmarking" in win32gui.GetClassName(hwnd).lower() or "Max Marking" in win32gui.GetWindowText(hwnd):
            text = get_window_text(hwnd)
            if "蚀刻" in text or "正在蚀刻" in text:
                res.append(True)
    res = []
    win32gui.EnumWindows(callback, res)
    return len(res) > 0

def engrave_task():
    os.startfile('....filepath....')
    time.sleep(2)
    pyautogui.press('f2')
    time.sleep(1)
    wait_start = time.time()
    while time.time() - wait_start < 300:
        if not check_etching_status():
            break
        time.sleep(1)
    os.system('taskkill /f /im maxmarking.exe')

额外优化建议

  • 如果你可以拿到Max Marking的日志文件或者运行状态接口,优先读取日志判断状态,可靠性最高
  • 两种方案都加了超时兜底逻辑,避免软件报错卡死导致程序一直等待

内容的提问来源于stack exchange,提问作者Mitch McDonald

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:27:02