繁体   English   中英

Python-在Windows中检查“确定”或“取消”框的状态

[英]Python - check status of “Ok” or “Cancel” box in Windows

我正在使用Python在无聊的东西自动化的帮助下使漫长而无聊的过程自动化。 我本质上是将其用作宏,通过一系列Pyautogui命令来为我完成工作,这些命令使用程序创建PDF,然后使用PyPDF2对其进行分类。 这是为不同的机场创建性能文件。 但是,不同的机场具有不同数量的跑道,因此需要不同的时间才能完成。

因此,有没有办法等到下面显示的'Ok'框可以使用Python按下?

取消

目前,我只是在最坏的情况下,将脚本暂停为跑道最多的机场(大约90秒)所花费的时间,但是某些机场在10秒内完成,所以这里浪费了很多时间。

        time.sleep(15)
        pyautogui.press('enter')

因此,我发现很难找到一种方法来检查按钮是否可以按下(取消或确定)。 相反,我寻找其他指示该计算已完成的指标。 我遇到了winGuiAuto,它具有一些从窗口中提取文本和其他内容的非常有用的功能。

winGuiAuto

需要两个工具-如问题中所示找到窗口的窗口,然后提取文本。 这些曾经是

findTopWindow
dumpWindow

作为示例,我在程序运行时以及完成后从窗口显示了输出。

正在运行:

[[3736670, 'OK', 'Button'], [1180838, 'Cancel', 'Button'], [3737440, 'Calculating:  EGCC 05LAFTMP', 'Static'], [1050590, 'Start Calc:', 'Static'], [3999714, 'End Calc:', 'Static'], [4392774, 'Total Calc:', 'Static'], [8390102, 'Status:', 'Static'], [6489324, 'Calculation Time', 'Button'], [7997044, '12:47:02', 'Static'], [9242260, '12:47:11', 'Static'], [4589322, '', 'Static'], [4851642, 'Progress1', 'msctls_progress32'], [2885686, '--', 'Static']]

已完成:

[[3736670, 'OK', 'Button'], [1180838, 'Cancel', 'Button'], [3737440, 'Calculation Finished.', 'Static'], [1050590, 'Start Calc:', 'Static'], [3999714, 'End Calc:', 'Static'], [4392774, 'Total Calc:', 'Static'], [8390102, 'Status:', 'Static'], [6489324, 'Calculation Time', 'Button'], [7997044, '12:47:02', 'Static'], [9242260, '12:48:05', 'Static'], [4589322, '00:01:03', 'Static'], [4851642, 'Progress1', 'msctls_progress32'], [2885686, '/', 'Static']]

如您所见,“计算中:”变为“计算完成”。

解决方案是实现一个检查语句,该语句仅在计算完成后才允许宏继续运行。

        hwnd = findTopWindow('Calculating')

        while True:
            data = dumpWindow(hwnd)
            if data[2][1] == 'Calculation Finished.':
                break`enter code here`

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM