import subprocess import psutil import time from datetime import datetime, timedelta from pywinauto import Application # --- Prepare dates yesterday = (datetime.now() - timedelta(days=1)).strftime("%d/%m/%Y") yesterday2 = (datetime.now() - timedelta(days=1)).strftime("%Y_%m_%d") # --- Launch IPCAS2 subprocess.Popen([r"C:\IPCAS2\Bin\ipcas2.exe"]) # --- Login window app = Application(backend="uia").connect(title_re="Login IPCAS-2 System.*", timeout=10) window = app.window(title_re="Login IPCAS-2 System.*") window.wait('visible', timeout=10) window.set_focus() window.child_window(auto_id="1004", control_type="Edit").set_text("HQTLTHANH") # Username window.child_window(auto_id="1003", control_type="Edit").set_text("7qANZQ2qkp2C_oAQ") # Password window.child_window(auto_id="1002", control_type="Button").wait('enabled').invoke() # --- Sign in time.sleep(3) list_control = app.window(title_re="") list_control.wait('visible', timeout=10) list_control.set_focus() list_control.child_window(title="Sign (F2)", auto_id="1005", control_type="Button").wait('enabled').invoke() list_control.child_window(auto_id="1007", control_type="Edit").set_text("Abc123") list_control.child_window(title="OK", auto_id="1", control_type="Button").wait('enabled').invoke() #comment out if you are using the latest version list_control.child_window(title="OK", auto_id="2", control_type="Button").wait('enabled').invoke() list_control.child_window(title="OK", auto_id="1003", control_type="Button").wait('enabled').invoke() # --- Open main IPCAS window app = Application(backend="uia").connect(title_re=".*IPCAS System.*", timeout=10) main_win = app.window(title_re=".*IPCAS System.*") main_win.wait('visible', timeout=10) main_win.set_focus() main_win.child_window(class_name="Edit", found_index=0).type_keys("mshr19") main_win.child_window(title="Tru so chinh", control_type="ListItem").wait('visible', timeout=30) # --- Switch to Win32 backend for input handling app = Application(backend="win32").connect(title_re=".*IPCAS System.*", timeout=10) main_win = app.window(title_re=".*IPCAS System.*") main_win.wait('visible', timeout=10) main_win.set_focus() # --- Configure report parameters main_win.child_window(title="1000", class_name="Edit").type_keys("^a{BACKSPACE}9999", with_spaces=True) main_win.child_window(title="Include Sub Branch", class_name="Button").click_input() main_win.child_window(title="Detail by branch", class_name="Button").click_input() main_win.child_window(title=" Show BRCD", class_name="Button").click_input() #main_win.child_window(title="0-TGNNNN-KHNV", class_name="Edit").type_keys("^a{BACKSPACE}TDHSX_BC15{ENTER}", with_spaces=True) main_win.child_window(title="0-TGNNNN-KHNV", class_name="Edit").type_keys("^a{BACKSPACE}BTD_KD{ENTER}", with_spaces=True) main_win.child_window(title="Y - Year", class_name="ComboBox").select("D - Day") main_win.child_window(class_name="PBEDIT105", found_index=0).type_keys("^a{BACKSPACE}" + yesterday, with_spaces=True) main_win.child_window(title="Base", class_name="Button").click_input() main_win.child_window(title="&Make Report", class_name="Button").click_input() # --- Wait for report generation app = Application(backend="win32").connect(class_name="FNWND3105") win = app.window(class_name="FNWND3105") while True: matches = win.descendants(title=" Completed Successfully 34 items loaded", class_name="Button") if matches: break time.sleep(0.5) win.child_window(title="Display All Data", class_name="Button").click_input() # --- Wait for Info popup app = Application(backend="win32").connect(class_name="FNWND3105") main_win = app.window(class_name="FNWND3105") while True: try: info_win = app.window(title="Info", class_name="#32770") if info_win.exists(timeout=1) and info_win.child_window(title="Finished", class_name="Static").exists(timeout=1): break except: pass time.sleep(0.5) info_win.set_focus() info_win.child_window(title="OK", class_name="Button").click_input() # --- Export report to Excel main_win.child_window(title="&Excel", class_name="Button").click_input() # --- Save file dialog while True: try: save_dialog = app.window(title="Save as File", class_name="#32770") if save_dialog.exists(timeout=1): break except: pass time.sleep(0.5) save_dialog.child_window(class_name="Edit").set_edit_text(yesterday2 + "_TDHSX_BC15") save_dialog.child_window(title="&Save", class_name="Button").click_input() from pywinauto import Application from pywinauto.findwindows import find_windows time.sleep(5) # wait for Excel to load fully try: hwnds = find_windows(title_re=".*Excel", class_name="XLMAIN") if hwnds: app = Application(backend="win32").connect(handle=hwnds[0]) app.window(handle=hwnds[0]).close() except Exception: pass subprocess.run(["python", "ipcas02.py"], check=True)