Skip to content

Instantly share code, notes, and snippets.

@stuaxo
Created December 7, 2018 12:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stuaxo/70e00c1535d4348196969af6dd4d731d to your computer and use it in GitHub Desktop.
Save stuaxo/70e00c1535d4348196969af6dd4d731d to your computer and use it in GitHub Desktop.
Screenshot a single window
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"import win32gui\n",
"import win32ui\n",
"from ctypes import windll\n",
"from PIL import Image\n",
"\n",
"def screenshot_window(classname=None, title=None, hwnd=None, client_only=False):\n",
" \"\"\"\n",
" param classname: Window Class\n",
" param client_area: if True grab only the client area\n",
" \n",
" \"\"\"\n",
" assert any([classname, title, hwnd]), \"specify a window class, title or hwnd\"\n",
" if hwnd is None:\n",
" hwnd = win32gui.FindWindow(classname, title)\n",
" \n",
" # Change the line below depending on whether you want the whole window\n",
" # or just the client area. \n",
" if client_only:\n",
" left, top, right, bot = win32gui.GetClientRect(hwnd)\n",
" else:\n",
" left, top, right, bot = win32gui.GetWindowRect(hwnd)\n",
" w = right - left\n",
" h = bot - top\n",
"\n",
" hwndDC = win32gui.GetWindowDC(hwnd)\n",
" mfcDC = win32ui.CreateDCFromHandle(hwndDC)\n",
" saveDC = mfcDC.CreateCompatibleDC()\n",
"\n",
" saveBitMap = win32ui.CreateBitmap()\n",
" saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)\n",
"\n",
" saveDC.SelectObject(saveBitMap)\n",
"\n",
" # Change the line below depending on whether you want the whole window\n",
" # or just the client area. \n",
" if client_only:\n",
" result = windll.user32.PrintWindow(hwnd, saveDC.GetSafeHdc(), 1)\n",
" else:\n",
" result = windll.user32.PrintWindow(hwnd, saveDC.GetSafeHdc(), 0)\n",
"\n",
" bmpinfo = saveBitMap.GetInfo()\n",
" bmpstr = saveBitMap.GetBitmapBits(True)\n",
"\n",
" im = Image.frombuffer(\n",
" 'RGB',\n",
" (bmpinfo['bmWidth'], bmpinfo['bmHeight']),\n",
" bmpstr, 'raw', 'BGRX', 0, 1)\n",
"\n",
" win32gui.DeleteObject(saveBitMap.GetHandle())\n",
" saveDC.DeleteDC()\n",
" mfcDC.DeleteDC()\n",
" win32gui.ReleaseDC(hwnd, hwndDC)\n",
" return im"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<PIL.Image.Image image mode=RGB size=403x306 at 0x1474803B0B8>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"screenshot_window('Notepad', None)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment