hwnd=win32gui.FindWindow(0,“窗口名字”)
hwndDC=win32gui.GetWindowDC(hwnd)
mfcDC=win32ui.GreateDCFromHandle(hwnd)
neicunDC=mfcDC.CreateCompatibleDC()
savebitmap=win32ui.CreateBitmap()
width=40
height=40(长宽为自己想要图片的大小,单位是像素)
savebitmap.CreateCompatibleBitmap(mfcDC,width,height)
neicunDC.SleteObject(savebitmap)
neicunDC.BitBle((w1,w2), width,height, mfcDC, (x,y), win32con.SRCCOPY)
"""
BitBle函数需要输入6个参数,
第一参数(w1,w2)
指在位图里显示的左上角顶点,一般为(0,0),若不为(0,0),应用位图无法覆盖的地方为黑色背景。
第二第三参数width,height
最终截图的长宽(一般与上面设置的位图大小一致)。
第四参数
指窗口的mfcDC。
第五参数(x,y)
指应用截图起点的逻辑坐标(设备坐标指相对于屏幕左上角为起点的坐标,逻辑坐标指相对于应用窗口左上角的坐标)。
第六参数win32con.SRCCOPY,
指用复制的方法截取,其他参数可百度光栅操作代码。
整个逻辑是内存作为黑色背景墙,第二层为位图,第三层为我们需要截图的位置。
所以BitBle的第一个参数是位图放置在黑色背景墙的位置(内存),以黑色背景墙左上角为起点,(w1,w2)为位图左上角顶点的位置。
放置好位图后,在位图上截图,截图的长为width,宽为height。
截图的起始位置(相对于应用窗口左上角顶点的位置坐标)为(x,y)。
"""
savebitmap.SaveBitmapFile(neicunDC,filename)
win32gui.delete(savebitmap.GetHandle())
neicunDC.DeleteDC()
mfcDC.DeleteDC()
win32gui.Release(hwnd,hwndDC)