Python - 检查" Ok"的状态或"取消" Windows中的框

时间:2016-12-01 11:35:49

标签: python macros pyautogui

我使用Python在自动化无聊的东西的帮助下自动化一个漫长而枯燥的过程。我基本上使用它作为宏来完成我的工作,使用一系列Pyautogui命令来使用程序创建PDF,然后使用PyPDF2对它们进行排序。为不同的机场创建性能文件。然而,不同的机场具有不同数量的跑道,因此需要不同的时间来完成。

那么,有没有办法等到“好”之后可以使用Python按下下面显示的框吗?

Cancel

Ok

在那一刻我只是采取了最糟糕的情况并暂停了脚本占用机场时间最多的跑道(大约90秒),但有些机场在10秒内完成,所以有很多时间浪费在这里。

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

1 个答案:

答案 0 :(得分:0)

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

winGuiAuto

需要两个工具 - 找到问题中显示的窗口的hwnd然后拉动文本。这些是

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`