代码拉取完成,页面将自动刷新
# 对后台窗口截图
import win32gui, win32ui, win32con
from ctypes import windll
from PIL import Image
import cv2
import numpy,time
# 获取后台窗口的句柄,注意后台窗口不能最小化
# hWnd = win32gui.FindWindow("NotePad", None) # 窗口的类名可以用Visual Studio的SPY++工具获取
# hWnd = win32gui.FindWindow(None, 'KalpaOfSword') # 窗口的类名可以用Visual Studio的SPY++工具获取
# hWnd = win32gui.FindWindow(None, '原神账号.txt - Notepad')
# hWnd = win32gui.FindWindow(None, '抖音')
hWnd = win32gui.FindWindow(None, 'VMware Workstation')
print("hWnd :",hWnd)
# 获取句柄窗口的大小信息
left, top, right, bot = win32gui.GetWindowRect(hWnd)
width = right - left
height = bot - top
print(left, top, right, bot)
print('窗口尺寸', right - left, bot - top)
time.sleep(1)
# 返回句柄窗口的设备环境,覆盖整个窗口,包括非客户区,标题栏,菜单,边框
hWndDC = win32gui.GetWindowDC(hWnd)
time.sleep(1)
# 创建设备描述表
mfcDC = win32ui.CreateDCFromHandle(hWndDC)
time.sleep(1)
# 创建内存设备描述表
saveDC = mfcDC.CreateCompatibleDC()
time.sleep(1)
# 创建位图对象准备保存图片
saveBitMap = win32ui.CreateBitmap()
time.sleep(1)
# 为bitmap开辟存储空间
saveBitMap.CreateCompatibleBitmap(mfcDC, width, height)
time.sleep(1)
# 将截图保存到saveBitMap中
saveDC.SelectObject(saveBitMap)
time.sleep(1)
# 保存bitmap到内存设备描述表
saveDC.BitBlt((0, 0), (width, height), mfcDC, (0, 0), win32con.SRCCOPY)
time.sleep(1)
# 如果要截图到打印设备:
###最后一个int参数:0-保存整个窗口,1-只保存客户区。如果PrintWindow成功函数返回值为1
# result = windll.user32.PrintWindow(hWnd,saveDC.GetSafeHdc(),0)
# print(result) #PrintWindow成功则输出1
# 保存图像
#方法一:windows api保存
#保存bitmap到文件
saveBitMap.SaveBitmapFile(saveDC, "img_Winapi.bmp")
# #方法二(第一部分):PIL保存
##获取位图信息
# bmpinfo = saveBitMap.GetInfo()
# bmpstr = saveBitMap.GetBitmapBits(True)
# ##生成图像
# im_PIL = Image.frombuffer('RGB', (bmpinfo['bmWidth'], bmpinfo['bmHeight']), bmpstr, 'raw', 'BGRX', 0, 1)
# ##方法二(后续转第二部分)
# im_PIL.save("im_PIL.png") # 保存
# im_PIL.show() # 显示
##方法三(第一部分):opencv+numpy保存
###获取位图信息
# signedIntsArray = saveBitMap.GetBitmapBits(True)
##方法三(后续转第二部分)
# 内存释放
win32gui.DeleteObject(saveBitMap.GetHandle())
saveDC.DeleteDC()
mfcDC.DeleteDC()
win32gui.ReleaseDC(hWnd, hWndDC)
# ##方法二(第二部分):PIL保存
# ###PrintWindow成功,保存到文件,显示到屏幕
# im_PIL.save("im_PIL.png") # 保存
# im_PIL.show() # 显示
#
# ##方法三(第二部分):opencv+numpy保存
# ###PrintWindow成功,保存到文件,显示到屏幕
# im_opencv = numpy.frombuffer(signedIntsArray, dtype='uint8')
# im_opencv.shape = (height, width, 4)
# cv2.cvtColor(im_opencv, cv2.COLOR_BGRA2RGB)
# cv2.imwrite("im_opencv.jpg", im_opencv, [int(cv2.IMWRITE_JPEG_QUALITY), 100]) # 保存
# cv2.namedWindow('im_opencv') # 命名窗口
# cv2.imshow("im_opencv", im_opencv) # 显示
# cv2.waitKey(0)
# cv2.destroyAllWindows()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。