import win32gui, win32process, ctypes
from ctypes import wintypes

user32 = ctypes.windll.user32
hdesk = user32.OpenInputDesktop(0, False, 0x01FF)
if hdesk:
    user32.SetThreadDesktop(hdesk)

out_file = r"c:\Projects\JX\logs\real_popups_detailed.txt"
f = open(out_file, "w", encoding="utf-8")

def log(msg):
    print(msg)
    f.write(str(msg) + "\n")
    f.flush()

def enum_cb(h, _):
    pid = wintypes.DWORD()
    user32.GetWindowThreadProcessId(h, ctypes.byref(pid))
    t = win32gui.GetWindowText(h)
    c = win32gui.GetClassName(h)
    if "Error" in t or c == "#32770":
        log(f"\nPopup HWND: 0x{h:08X} | PID: {pid.value} | Class: '{c}' | Title: '{t}'")
        def child_cb(ch, _):
            ct = win32gui.GetWindowText(ch)
            cc = win32gui.GetClassName(ch)
            log(f"   Child 0x{ch:08X} [{cc}]: '{ct}'")
            return True
        win32gui.EnumChildWindows(h, child_cb, None)
    return True

WNDENUMPROC = ctypes.WINFUNCTYPE(wintypes.BOOL, wintypes.HWND, wintypes.LPARAM)
user32.EnumWindows(WNDENUMPROC(enum_cb), 0)
f.close()
