在Python使用Win32api接口实现后台截图

 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()

 

posted @ 2022-09-28 13:26  小二君i  阅读(3116)  评论(1)    收藏  举报