0

私はPythonを使用して、退屈なものを自動化することで、長くて退屈なプロセスを自動化しています。私は基本的に、プログラムを使用してPDFを作成し、PyPDF2を使用してこれらを整理する一連のPyautoguiコマンドで仕事をするマクロとして使用しています。異なる空港のパフォーマンス ファイルを作成するためです。ただし、空港によって滑走路の数が異なるため、完了するまでにかかる時間も異なります。

では、以下に示す「OK」ボックスが Python を使用して押せるようになるまで待つ方法はありますか?

キャンセル

Ok

現時点では、最悪のシナリオを想定して、滑走路が最も多い空港にかかる時間 (約 90 秒) だけスクリプトを一時停止していますが、一部の空港は 10 秒で完了するため、ここで多くの時間が無駄になります。

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

1 に答える 1

0

そのため、ボタンを押すことができるかどうか (キャンセルまたは OK) を確認する方法を見つけるのは非常に困難でした。代わりに、計算が完了したことを示す他の指標を探しました。ウィンドウからテキストやその他のものを引き出すのに非常に便利な機能を備えたwinGuiAutoに出くわしました。

winGuiAuto

質問に示されているようにウィンドウの hwnd を見つけてから、テキストをプルするという 2 つのツールが必要でした。これらが

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`
于 2016-12-06T12:54:38.110 に答える