关于 DC 的我到 (CreateDCFromHandle) 创建设备描述表 就不明白怎么回事了, 所以为什么 窗口后台截屏会出现黑屏 以及怎么解决 也就不明白 import win32ui
import win32gui
import win32con
def get_img(hwnd):
"""
后台截屏
:param hwnd: 窗口句柄
"""
left, top, right, bot = win32gui.GetWindowRect(hwnd)
w = right - left
h = bot - top
dc = win32gui.GetWindowDC(hwnd)
mfcDc = win32ui.CreateDCFromHandle(dc) # 创建设备描述表
saveDC = mfcDc.CreateCompatibleDC() # 创建内存设备描述表
saveBitMap = win32ui.CreateBitmap() # 创建位图对象准备保存图片
saveBitMap.CreateCompatibleBitmap(mfcDc, w, h) # 为 bitmap 开辟存储空间
saveDC.SelectObject(saveBitMap) # 将截图保存到 saveBitMap 中
saveDC.BitBlt((0, 0), (w, h), mfcDc, (0, 0), win32con.SRCCOPY) # 保存bitmap到内存设备描述表
saveBitMap.SaveBitmapFile(saveDC, fr"{hwnd}.bmp") # 保存bitmap到文件
# 释放缓存
win32gui.DeleteObject(saveBitMap.GetHandle())
saveDC.DeleteDC()
mfcDc.DeleteDC()
win32gui.ReleaseDC(hwnd, dc)
|