1 #对后台窗口截图 2 import win32gui, win32ui, win32con 3 import cv2 4 import numpy as np 5 6 #获取后台窗口的句柄,注意后台窗口不能最小化 7 hWnd = win32gui.FindWindow("NotePad",None) #窗口的类名可以用Visual Studio的SPY++工具获取 8 #获取句柄窗口的大小信息 9 left, top, right, bot = win32gui.GetWindowRect(hWnd) 10 width = right - left 11 height = bot - top 12 #返回句柄窗口的设备环境,覆盖整个窗口,包括非客户区,标题栏,菜单,边框 13 hWndDC = win32gui.GetWindowDC(hWnd) 14 #创建设备描述表 15 mfcDC = win32ui.CreateDCFromHandle(hWndDC) 16 #创建内存设备描述表 17 saveDC = mfcDC.CreateCompatibleDC() 18 #创建位图对象准备保存图片 19 saveBitMap = win32ui.CreateBitmap() 20 #为bitmap开辟存储空间 21 saveBitMap.CreateCompatibleBitmap(mfcDC,width,height) 22 #将截图保存到saveBitMap中 23 saveDC.SelectObject(saveBitMap) 24 #保存bitmap到内存设备描述表 25 saveDC.BitBlt((0,0), (width,height), mfcDC, (0, 0), win32con.SRCCOPY) 26 ###获取位图信息 27 signedIntsArray = saveBitMap.GetBitmapBits(True) 28 #内存释放 29 win32gui.DeleteObject(saveBitMap.GetHandle()) 30 saveDC.DeleteDC() 31 mfcDC.DeleteDC() 32 win32gui.ReleaseDC(hWnd,hWndDC) 33 #保存到文件 34 img = numpy.frombuffer(signedIntsArray, dtype = 'uint8') 35 img.shape = (height, width, 4) 36 cv2.cvtColor(img, cv2.COLOR_BGRA2RGB) 37 cv2.imwrite("img.jpg",img,[int(cv2.IMWRITE_JPEG_QUALITY), 100]) 38 #显示到屏幕 39 cv2.namedWindow('img') #命名窗口 40 cv2.imshow("img",img) #显示 41 cv2.waitKey(0) 42 cv2.destroyAllWindows()
标签:saveBitMap,截图,窗口,img,Python,mfcDC,cv2,win32gui,Win32api From: https://www.cnblogs.com/xiaoerjun/p/16737723.html