import ctypes

import uiautomation as auto
import win32con
import win32gui
import win32service

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

# 2. Find Discord window
discord_win = None
for win in auto.GetRootControl().GetChildren():
    if "discord" in win.Name.lower() or "discord" in win.ClassName.lower():
        discord_win = win
        break

if not discord_win:
    # Try finding by window handle directly
    hwnd = win32gui.FindWindow("Chrome_WidgetWin_1", None)
    if hwnd:
        discord_win = auto.ControlFromHandle(hwnd)

print(f"Found Discord Window: {discord_win}")
if discord_win:
    print(f"Name: {discord_win.Name}, ClassName: {discord_win.ClassName}, BoundingBox: {discord_win.BoundingRectangle}")

    # Try getting text controls or descendants
    print("Searching for text/list elements...")
    texts = []
    for ctrl, depth in auto.WalkTree(discord_win, maxDepth=6):
        if ctrl.Name and len(ctrl.Name.strip()) > 3:
            texts.append(f"[{ctrl.ControlTypeName}] {ctrl.Name.strip()[:100]}")
            if len(texts) >= 20:
                break
    print(f"Captured {len(texts)} elements:")
    for t in texts:
        print("  -", t)
