Skip to main content
Glama

screenshot_window

Capture screenshots of specific game windows for analysis in game hacking and reverse engineering workflows. Save images as PNG files or get base64 data for further processing.

Instructions

Take a screenshot of a specific window. Args: target: Window title (string) or HWND handle (integer) save_path: Optional path to save the screenshot (PNG). If empty, returns base64. Returns: Screenshot info with base64 data or saved file path.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
targetYes
save_pathNo

Implementation Reference

  • The handler function for the 'screenshot_window' tool. It captures a screenshot of a specified window using Windows API (win32gui, win32ui) and PIL for image processing, supporting both base64 output and file saving.
    @mcp.tool() def screenshot_window(target: Union[str, int], save_path: str = "") -> Dict[str, Any]: """ Take a screenshot of a specific window. Args: target: Window title (string) or HWND handle (integer) save_path: Optional path to save the screenshot (PNG). If empty, returns base64. Returns: Screenshot info with base64 data or saved file path. """ if not SCREENSHOT_AVAILABLE: return {"error": "Screenshot support not available. Install: pip install pywin32 pillow"} try: # Find the window hwnd = None if isinstance(target, int): hwnd = target else: def find_window(h, _): nonlocal hwnd if win32gui.IsWindowVisible(h): title = win32gui.GetWindowText(h) if title and target.lower() in title.lower(): hwnd = h return False return True win32gui.EnumWindows(find_window, None) if not hwnd: return {"error": f"Window not found: {target}"} # Get window dimensions rect = win32gui.GetWindowRect(hwnd) width = rect[2] - rect[0] height = rect[3] - rect[1] if width <= 0 or height <= 0: return {"error": "Window has invalid dimensions"} # Capture the window hwnd_dc = win32gui.GetWindowDC(hwnd) mfc_dc = win32ui.CreateDCFromHandle(hwnd_dc) save_dc = mfc_dc.CreateCompatibleDC() bitmap = win32ui.CreateBitmap() bitmap.CreateCompatibleBitmap(mfc_dc, width, height) save_dc.SelectObject(bitmap) # Try PrintWindow first (works for most windows) result = ctypes.windll.user32.PrintWindow(hwnd, save_dc.GetSafeHdc(), 2) if result == 0: # Fallback to BitBlt save_dc.BitBlt((0, 0), (width, height), mfc_dc, (0, 0), win32con.SRCCOPY) # Convert to PIL Image bmp_info = bitmap.GetInfo() bmp_str = bitmap.GetBitmapBits(True) img = Image.frombuffer( 'RGB', (bmp_info['bmWidth'], bmp_info['bmHeight']), bmp_str, 'raw', 'BGRX', 0, 1 ) # Cleanup win32gui.DeleteObject(bitmap.GetHandle()) save_dc.DeleteDC() mfc_dc.DeleteDC() win32gui.ReleaseDC(hwnd, hwnd_dc) # Save or return base64 if save_path: img.save(save_path, 'PNG') return { "success": True, "path": save_path, "width": width, "height": height, "window_title": win32gui.GetWindowText(hwnd) } else: buffer = io.BytesIO() img.save(buffer, format='PNG') img_base64 = base64.b64encode(buffer.getvalue()).decode('utf-8') return { "success": True, "width": width, "height": height, "window_title": win32gui.GetWindowText(hwnd), "image_base64": img_base64, "format": "png" } except Exception as e: return {"error": f"Screenshot failed: {str(e)}"}

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/0xhackerfren/frida-game-hacking-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server