Python截图2+监视器(Windows)

如果连接到多个显示器,如何使用python进行截图

我试过了:

import sys from PyQt4.QtGui import QPixmap, QApplication app = QApplication(sys.argv) QPixmap.grabWindow(QApplication.desktop().winId()).save('test.png', 'png') import ImageGrab im = ImageGrab.grab() im.save('test.png', 'PNG') 

这两个选项都提供了屏幕截图,只有主监视器

如果我使用winapi:

 hWnd = win32gui.FindWindow(None, win_name) dc = win32gui.GetWindowDC(hWnd) i_colour = int(win32gui.GetPixel(dc,int(x),int(y))) rgb = ((i_colour & 0xff), ((i_colour >> 8) & 0xff), ((i_colour >> 16) & 0xff)) 

我从第二台显示器的窗口中得到一张照片。 但是会很慢。

如果我按下剪贴板中的'printscreen'将是一个正常的屏幕截图,所有的显示器。 有没有一个选项可以在Python中获得完整的屏幕截图?

使用wxPython,win32api和ctypes的组合:

 import wx, win32api, win32gui, win32con, ctypes class App(wx.App): def OnInit(self): dll = ctypes.WinDLL('gdi32.dll') for idx, (hMon, hDC, (left, top, right, bottom)) in enumerate(win32api.EnumDisplayMonitors(None, None)): hDeskDC = win32gui.CreateDC(win32api.GetMonitorInfo(hMon)['Device'], None, None) bitmap = wx.EmptyBitmap(right - left, bottom - top) hMemDC = wx.MemoryDC() hMemDC.SelectObject(bitmap) try: dll.BitBlt(hMemDC.GetHDC(), 0, 0, right - left, bottom - top, int(hDeskDC), 0, 0, win32con.SRCCOPY) finally: hMemDC.SelectObject(wx.NullBitmap) bitmap.SaveFile('screenshot_%02d.bmp' % idx, wx.BITMAP_TYPE_BMP) win32gui.ReleaseDC(win32gui.GetDesktopWindow(), hDeskDC) return False App(0) 

我的Desktopmagic库为Python 2.6,2.7和3.3+提供了这个功能。 它可以返回一个PIL / Pillow Image或者写一个BMP。