import ctypes, time
from PIL import ImageGrab
import win32gui

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

hwnd = 0x00E207F6 # PID 30076

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

def click(x, y):
    lp = make_lparam(x, y)
    user32.PostMessageW(hwnd, 0x0200, 0, lp)
    time.sleep(0.04)
    user32.PostMessageW(hwnd, 0x0201, 1, lp)
    time.sleep(0.08)
    user32.PostMessageW(hwnd, 0x0202, 0, lp)
    time.sleep(0.05)

def send_key(vk):
    lp = (0x1C << 16) | 1
    user32.PostMessageW(hwnd, 0x0100, vk, lp)
    time.sleep(0.04)
    user32.PostMessageW(hwnd, 0x0101, vk, lp | (3 << 30))
    time.sleep(0.04)

user32.SetForegroundWindow(hwnd)
time.sleep(0.2)

# Click "Xác định" at (92, 561) in Character Selection
print("Clicking 'Xac dinh' at (92, 561) and sending VK_RETURN...")
click(92, 561)
time.sleep(0.1)
send_key(0x0D) # VK_RETURN

print("Waiting 5.0 seconds for map loading...")
time.sleep(5.0)

rect = win32gui.GetWindowRect(hwnd)
img = ImageGrab.grab(bbox=rect, all_screens=True)
path = r"c:\Projects\JX\logs\in_game_world_empirical.png"
img.save(path)
print(f"Empirical game world screenshot saved: {path}")
