在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 @   小二君i  阅读(2806)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示