请问为啥我用下面的代码对特定窗口进行截图的时候,当窗口为桌面或者文件夹的时候,保存的位图能够正常的显示,但是窗口变为网页或者其他的窗口的时候,保存的位图就变成了一张黑图,PrintWindow函数也试过,也是这种情况,请求大家帮忙解答指正 不甚感激。


import ctypes
import win32gui
import win32ui
import win32con
user32 = ctypes.windll.user32
gdi32 = ctypes.windll.gdi32
# 截图函数
def capture_window(hwnd):
# 获取目标窗口的大小
left, top, right, bot = win32gui.GetWindowRect(hwnd)
width = right - left
height = bot - top
# 创建设备上下文
hwndDC = win32gui.GetWindowDC(hwnd)
mfcDC = win32ui.CreateDCFromHandle(hwndDC)
saveDC = mfcDC.CreateCompatibleDC()
saveBitMap = win32ui.CreateBitmap()
saveBitMap.CreateCompatibleBitmap(mfcDC, width, height)
saveDC.SelectObject(saveBitMap)
# 使用BitBlt代替PrintWindow
saveDC.BitBlt((0, 0), (width, height), mfcDC, (0, 0), win32con.SRCCOPY)
saveBitMap.SaveBitmapFile(saveDC, 'screenshot.bmp')
# 清理
win32gui.DeleteObject(saveBitMap.GetHandle())
saveDC.DeleteDC()
mfcDC.DeleteDC()
win32gui.ReleaseDC(hwnd, hwndDC)
hwnd = 132452 # 将该值替换为实际窗口句柄
capture_window(hwnd)