| 5 | import win32gui, win32ui, win32con, win32api |
| 6 | |
| 7 | def grab_screen(region=None): |
| 8 | |
| 9 | hwin = win32gui.GetDesktopWindow() |
| 10 | |
| 11 | if region: |
| 12 | left,top,x2,y2 = region |
| 13 | width = x2 - left + 1 |
| 14 | height = y2 - top + 1 |
| 15 | else: |
| 16 | width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN) |
| 17 | height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN) |
| 18 | left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN) |
| 19 | top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN) |
| 20 | |
| 21 | hwindc = win32gui.GetWindowDC(hwin) |
| 22 | srcdc = win32ui.CreateDCFromHandle(hwindc) |
| 23 | memdc = srcdc.CreateCompatibleDC() |
| 24 | bmp = win32ui.CreateBitmap() |
| 25 | bmp.CreateCompatibleBitmap(srcdc, width, height) |
| 26 | memdc.SelectObject(bmp) |
| 27 | memdc.BitBlt((0, 0), (width, height), srcdc, (left, top), win32con.SRCCOPY) |
| 28 | |
| 29 | signedIntsArray = bmp.GetBitmapBits(True) |
| 30 | img = np.fromstring(signedIntsArray, dtype='uint8') |
| 31 | img.shape = (height,width,4) |
| 32 | |
| 33 | srcdc.DeleteDC() |
| 34 | memdc.DeleteDC() |
| 35 | win32gui.ReleaseDC(hwin, hwindc) |
| 36 | win32gui.DeleteObject(bmp.GetHandle()) |
| 37 | |
| 38 | return cv2.cvtColor(img, cv2.COLOR_BGRA2RGB) |