""" 截图工具 """ import cv2 import numpy import win32con import win32gui import win32ui def window_capture(hwnd): rect = win32gui.GetWindowRect(hwnd) w = rect[2] - rect[0] h = rect[3] - rect[1] if w == 0 or h == 0: return None # 返回句柄窗口的设备环境,覆盖整个窗口,包括非客户区,标题栏,菜单,边框 hWndDC = win32gui.GetWindowDC(hwnd) # 创建设备描述表 mfcDC = win32ui.CreateDCFromHandle(hWndDC) # 创建内存设备描述表 saveDC = mfcDC.CreateCompatibleDC() # 创建位图对象准备保存图片 saveBitMap = win32ui.CreateBitmap() # 为bitmap开辟存储空间 saveBitMap.CreateCompatibleBitmap(mfcDC, w, h) # 将截图保存到saveBitMap中 saveDC.SelectObject(saveBitMap) # 保存bitmap到内存设备描述表 saveDC.BitBlt((0, 0), (w, h), mfcDC, (0, 0), win32con.SRCCOPY) signedIntsArray = saveBitMap.GetBitmapBits(True) # 内存释放 win32gui.DeleteObject(saveBitMap.GetHandle()) saveDC.DeleteDC() mfcDC.DeleteDC() win32gui.ReleaseDC(hwnd, hWndDC) im_opencv = numpy.frombuffer(signedIntsArray, dtype='uint8') im_opencv.shape = (h, w, 4) cv2.cvtColor(im_opencv, cv2.COLOR_BGRA2RGB) return im_opencv