そのため、ボタンを押すことができるかどうか (キャンセルまたは 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`