经过数小时的搜寻,我设法“写下”了这个:
import win32gui from ctypes import windll hwnd = win32gui.FindWindow(None, 'Steam') hdc = win32gui.GetDC(hwnd) hdcMem = win32gui.CreateCompatibleDC(hdc) hbitmap = win32ui.CreateBitmap() hbitmap = win32gui.CreateCompatibleBitmap(hdcMem, 500, 500) win32gui.SelectObject(hdcMem, hbitmap) windll.user32.PrintWindow(hwnd, hdcMem, 0)
这是这样做的正确方法,我将如何保存图像?
提前致谢。
经过大量搜索并尝试了各种不同的方法,以下对我有用。
import win32gui import win32ui from ctypes import windll import Image hwnd = 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 - left h = bot - top hwndDC = 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 result bmpinfo = 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")