import ctypes, time
from ctypes import wintypes
import win32gui
from PIL import ImageGrab

user32 = ctypes.windll.user32
kernel32 = ctypes.windll.kernel32

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

hwnd = 0xdf137a

def log(msg):
    with open(r'c:\Projects\JX\logs\menu_click.log', 'a', encoding='utf-8') as f:
        f.write(f"[{time.strftime('%H:%M:%S')}] {msg}\n")
    print(msg)

log(f"Testing window: {hex(hwnd)}, IsWindow: {user32.IsWindow(hwnd)}")

def make_lparam(x, y):
    return (y << 16) | (x & 0xFFFF)

WM_MOUSEMOVE = 0x0200
WM_LBUTTONDOWN = 0x0201
WM_LBUTTONUP = 0x0202
WM_KEYDOWN = 0x0100
WM_KEYUP = 0x0101
MK_LBUTTON = 0x0001
VK_RETURN = 0x0D

# Set foreground
user32.SetForegroundWindow(hwnd)
time.sleep(0.2)

# Send MouseMove
lp = make_lparam(400, 388)
r1 = user32.PostMessageW(hwnd, WM_MOUSEMOVE, 0, lp)
log(f"PostMessage WM_MOUSEMOVE: {r1}, err: {kernel32.GetLastError()}")
time.sleep(0.1)

# Send LButtonDown
r2 = user32.PostMessageW(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, lp)
log(f"PostMessage WM_LBUTTONDOWN: {r2}, err: {kernel32.GetLastError()}")
time.sleep(0.1)

# Send LButtonUp
r3 = user32.PostMessageW(hwnd, WM_LBUTTONUP, 0, lp)
log(f"PostMessage WM_LBUTTONUP: {r3}, err: {kernel32.GetLastError()}")

time.sleep(2)

# Screenshot
rect = win32gui.GetWindowRect(hwnd)
img = ImageGrab.grab(bbox=rect)
save_path = r'c:\Projects\JX\logs\game_after_test_click.png'
img.save(save_path)
log(f"Saved screenshot to {save_path}")
