Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python screenshot 2+ monitors (windows)

How to make a screenshot with python, if connected to multiple monitors?

I tried:

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')

Both options provide a screenshot, only the primary monitor

If I use 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))

I get a picture from a window in the second monitor. But it will be very slow.

If I press key 'printscreen' in the clipboard will be a normal screenshot, with all monitors. Is there a option to get a Full screenshot in Python?

like image 762
Echeg Avatar asked Aug 04 '11 12:08

Echeg


1 Answers

  • install desktopmagic:
pip install Desktopmagic)
from __future__ import print_function
import desktopmagic
from desktopmagic.screengrab_win32 \
import(getDisplayRects,saveScreenToBmp,getScreenAsImage,getRectAsImage,getDisplaysAsImages)

""" getDisplayRects functions returns a list with all displays, in display order, like  [(0, 0, 1280, 1024), (-1280, 0, 0, 1024), (1280, -176, 3200, 1024)]  : (left, top, right, bottom)"""

screens=(getDisplayRects())
  • take a screenshot of the second monitor
rect = getRectAsImage(screens[1]) 
  • 0 for the first display 1 for the second and ...
#saves screenshot
rect.save('leftscr.png',format='png')
like image 53
user15332285 Avatar answered Sep 21 '22 11:09

user15332285