import ctypes

import win32con
import win32service

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

import win32gui
import win32ui
from PIL import Image

hwnd = 528446
rect = win32gui.GetWindowRect(hwnd)
w = rect[2] - rect[0]
h = rect[3] - rect[1]
print(f"Capturing HWND {hwnd}, size: {w}x{h}...")

try:
    hwnd_dc = win32gui.GetWindowDC(hwnd)
    mfc_dc = win32ui.CreateDCFromHandle(hwnd_dc)
    save_dc = mfc_dc.CreateCompatibleDC()
    save_bitmap = win32ui.CreateBitmap()
    save_bitmap.CreateCompatibleBitmap(mfc_dc, w, h)
    save_dc.SelectObject(save_bitmap)

    # PrintWindow flag 2 (PW_RENDERFULLCONTENT)
    res = ctypes.windll.user32.PrintWindow(hwnd, save_dc.GetSafeHdc(), 2)
    print(f"PrintWindow result: {res}")

    bmpinfo = save_bitmap.GetInfo()
    bmpstr = save_bitmap.GetBitmapBits(True)
    img = Image.frombuffer('RGB', (bmpinfo['bmWidth'], bmpinfo['bmHeight']), bmpstr, 'raw', 'BGRX', 0, 1)

    save_dc.DeleteDC()
    mfc_dc.DeleteDC()
    win32gui.ReleaseDC(hwnd, hwnd_dc)
    win32gui.DeleteObject(save_bitmap.GetHandle())

    img.save("discord_preview.png")
    print("Saved preview to discord_preview.png successfully!")
except Exception as e:
    print(f"Capture error: {e}")
