经过大量搜索并尝试了各种不同的方法,以下对我有用。
import win32guiimport win32uifrom ctypes import windllimport Imagehwnd = win32gui.FindWindow(None, 'Calculator')# Change the line below depending on whether you want the whole window# or just the client area. #left, top, right, bot = win32gui.GetClientRect(hwnd)left, top, right, bot = win32gui.GetWindowRect(hwnd)w = right - lefth = bot - tophwndDC = win32gui.GetWindowDC(hwnd)mfcDC = win32ui.CreateDCFromHandle(hwndDC)saveDC = mfcDC.CreateCompatibleDC()saveBitMap = win32ui.CreateBitmap()saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)saveDC.SelectObject(saveBitMap)# Change the line below depending on whether you want the whole window# or just the client area. #result = windll.user32.PrintWindow(hwnd, saveDC.GetSafeHdc(), 1)result = windll.user32.PrintWindow(hwnd, saveDC.GetSafeHdc(), 0)print resultbmpinfo = saveBitMap.GetInfo()bmpstr = saveBitMap.GetBitmapBits(True)im = Image.frombuffer( 'RGB', (bmpinfo['bmWidth'], bmpinfo['bmHeight']), bmpstr, 'raw', 'BGRX', 0, 1)win32gui.DeleteObject(saveBitMap.GetHandle())saveDC.DeleteDC()mfcDC.DeleteDC()win32gui.ReleaseDC(hwnd, hwndDC)if result == 1: #PrintWindow Succeeded im.save("test.png")


