import ctypes

import psutil
import win32con
import win32gui
import win32process
import win32service

# Attach to Default desktop
h_desk = win32service.OpenDesktop("Default", 0, False, win32con.GENERIC_ALL)
ctypes.windll.user32.SetThreadDesktop(int(h_desk))

discord_pids = [p.pid for p in psutil.process_iter(['name', 'pid']) if 'discord' in p.info['name'].lower()]
print(f"Discord PIDs: {discord_pids}")

windows = []
def enum_cb(hwnd, _):
    if win32gui.IsWindowVisible(hwnd):
        _, pid = win32process.GetWindowThreadProcessId(hwnd)
        if pid in discord_pids:
            title = win32gui.GetWindowText(hwnd)
            rect = win32gui.GetWindowRect(hwnd)
            cls = win32gui.GetClassName(hwnd)
            windows.append((hwnd, pid, title, cls, rect))

win32gui.EnumDesktopWindows(int(h_desk), enum_cb, None)
print(f"Total Discord windows visible: {len(windows)}")
for h, p, t, c, r in windows:
    print(f"HWND={h} | PID={p} | Class='{c}' | Title='{t}' | Rect={r}")
