Jobbar med ett projekt i python där jag vill få ett macro att utföras framgångsrikt även när jag döljer ett fönster med
Har förstått det som att fönstret ska gå att interagera med även om det är dolt, men kan ju självklart ha fel.
Är det möjligt att få detta att fungera på något sätt?
Så här de relevanta delarna av koden ut:
Gömma och visa fönstret
Hitta fönstret, även om det är dolt
Kod:
Makrot ska interagera/klicka på en knapp i detta dolda fönster. win32gui.ShowWindow(hwnd, command), ex SW_HIDE
Har förstått det som att fönstret ska gå att interagera med även om det är dolt, men kan ju självklart ha fel.
Är det möjligt att få detta att fungera på något sätt?
Så här de relevanta delarna av koden ut:
Gömma och visa fönstret
Kod:
def interact_with_window(self, hwnd, rel_x, rel_y): # Log original state for troubleshooting original_style = win32gui.GetWindowLong(hwnd, win32con.GWL_STYLE) self.log(f"Original style for window {hwnd}: {original_style}") try: # Bring the window to the foreground and make it visible win32gui.ShowWindow(hwnd, win32con.SW_SHOW) win32gui.SetForegroundWindow(hwnd) # Re-check window visibility window_placement = win32gui.GetWindowPlacement(hwnd) self.log(f"Window placement for {hwnd}: {window_placement}") if window_placement[1] == win32con.SW_MINIMIZE: self.log(f"Window {hwnd} is minimized, restoring window.") win32gui.ShowWindow(hwnd, win32con.SW_RESTORE) # Bring the window to the top of the z-order win32gui.BringWindowToTop(hwnd) win32gui.SetActiveWindow(hwnd) # Beräkna absoluta koordinater rect = win32gui.GetWindowRect(hwnd) x = rect[0] + rel_x y = rect[1] + rel_y # Log the calculated positions self.log(f"Calculated click position: ({x}, {y})") # Skicka musklick till fönstret lParam = win32api.MAKELONG(rel_x, rel_y) win32gui.PostMessage(hwnd, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, lParam) win32gui.PostMessage(hwnd, win32con.WM_LBUTTONUP, 0, lParam) finally: # Restore window state (if necessary) if (original_style & win32con.WS_VISIBLE) == 0: win32gui.ShowWindow(hwnd, win32con.SW_HIDE) # Restore original window style win32gui.SetWindowLong(hwnd, win32con.GWL_STYLE, original_style)
Hitta fönstret, även om det är dolt
Kod:
def find_window_advanced(self, title): def enum_windows_callback(hwnd, result): window_title = win32gui.GetWindowText(hwnd) window_class = win32gui.GetClassName(hwnd) if title.lower() in window_title.lower() or (window_class and "Save" in window_class): result.append(hwnd) return True result = [] win32gui.EnumWindows(enum_windows_callback, result) if result: return result[0] else: # Om inget fönster hittades, vänta lite och försök igen time.sleep(2) win32gui.EnumWindows(enum_windows_callback, result) return result[0] if result else None