68 lines
1.9 KiB
Python
68 lines
1.9 KiB
Python
"""
|
|
AutoRecover - Drucker Fehler Handler
|
|
Erkennt das "Error"-Fenster (Java AWT) und klickt automatisch "Recover" (max. 3x).
|
|
"""
|
|
|
|
import win32gui
|
|
import win32con
|
|
import ctypes
|
|
import time
|
|
|
|
MAX_VERSUCHE = 3
|
|
PRUEF_INTERVAL = 2 # Sekunden zwischen den Checks
|
|
|
|
def click_recover_button(hwnd):
|
|
"""
|
|
Holt die Fensterposition und klickt auf den Recover-Button.
|
|
Der Button ist zentriert am unteren Rand des Fensters.
|
|
"""
|
|
# Fenster in den Vordergrund holen
|
|
win32gui.SetForegroundWindow(hwnd)
|
|
time.sleep(0.3)
|
|
|
|
# Fensterposition und -größe ermitteln
|
|
left, top, right, bottom = win32gui.GetWindowRect(hwnd)
|
|
width = right - left
|
|
height = bottom - top
|
|
|
|
# Recover-Button liegt ca. bei: horizontal zentriert, ~85% der Höhe
|
|
click_x = left + width // 2
|
|
click_y = top + int(height * 0.85)
|
|
|
|
# Mausklick simulieren
|
|
ctypes.windll.user32.SetCursorPos(click_x, click_y)
|
|
time.sleep(0.1)
|
|
ctypes.windll.user32.mouse_event(0x0002, 0, 0, 0, 0) # linke Taste runter
|
|
ctypes.windll.user32.mouse_event(0x0004, 0, 0, 0, 0) # linke Taste hoch
|
|
|
|
print(f" → Klick auf Position ({click_x}, {click_y})")
|
|
|
|
def main():
|
|
versuche = 0
|
|
print("AutoRecover läuft... (Strg+C zum Beenden)")
|
|
print(f"Maximal {MAX_VERSUCHE} Versuche.\n")
|
|
|
|
while versuche < MAX_VERSUCHE:
|
|
hwnd = win32gui.FindWindow(None, "Error")
|
|
|
|
if hwnd and win32gui.IsWindowVisible(hwnd):
|
|
versuche += 1
|
|
print(f"[Versuch {versuche}/{MAX_VERSUCHE}] Fehlerfenster gefunden!")
|
|
|
|
time.sleep(0.5)
|
|
click_recover_button(hwnd)
|
|
|
|
if versuche >= MAX_VERSUCHE:
|
|
print(f"\nMaximale Versuche ({MAX_VERSUCHE}) erreicht. Programm beendet.")
|
|
break
|
|
|
|
time.sleep(3)
|
|
else:
|
|
time.sleep(PRUEF_INTERVAL)
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
main()
|
|
except KeyboardInterrupt:
|
|
print("\nProgramm manuell beendet.")
|