import time
import win32gui,win32ui,win32con
import numpy as np
import cv2
from PIL import ImageGrab, Image
import ctypes
def window_capture(hwnd,xSrc, ySrc,w,h):
hwndDC= win32gui.GetWindowDC(hwnd) #返回句柄窗口的设备环境,覆盖整个窗口,包括非客户区,标题栏,菜单,边框
mfcDC = win32ui.CreateDCFromHandle(hwndDC)#创建设备描述表
saveDC = mfcDC.CreateCompatibleDC()#创建内存设备描述表
saveBitMap = win32ui.CreateBitmap()#创建位图对象准备保存图片
rctA = win32gui.GetWindowRect(hwnd)#获取句柄窗口的大小信息
print(mfcDC)
saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)#为bitmap开辟存储空间
result = ctypes.windll.user32.PrintWindow(hwnd, saveDC.GetSafeHdc(), 2)
saveDC.SelectObject(saveBitMap)#将截图保存到saveBitMap中
saveDC.BitBlt((0, 0), (w,h), mfcDC, (xSrc, ySrc), win32con.SRCCOPY)#保存bitmap到内存设备描述表(668, 406)
signedIntsArray = saveBitMap.GetBitmapBits(True)###获取位图信息
# print(saveBitMap)
img = np.frombuffer(signedIntsArray, dtype="uint8")#保存到文件
img.shape = (h, w, 4)
# cv2.cvtColor(img, cv2.COLOR_RGBA2RGB)
# 显示到屏幕
# cv2.namedWindow('img') #命名窗口
# cv2.imshow("img",img) #显示
# cv2.waitKey(0)
# cv2.destroyAllWindows()
# cv2.cvtColor(img, cv2.COLOR_BGRA2RGB)
num=0
cv2.imwrite("./baotu_img/baotu_renwulan1.jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
win32gui.DeleteObject(saveBitMap.GetHandle()) #内存释放
mfcDC.DeleteDC()
saveDC.DeleteDC()
return Image.fromarray(cv2.cvtColor(img, cv2.COLOR_RGBA2RGB))