2010/10/7 Josu Rodriguez Vilda <jrvi...@gmail.com> > Hola a Todos, > > > Necesito capturar la pantalla en Windows, solo que los intentos que he > realizado, ninguno captura las interface transparentes como por ejemplo la > ventana de buscar y reemplazar del notepad++. > > He intentado estos metodos y todos funcionan para capturar pantalla pero > ninguno recoge las transparencias. ( no se ven las ventanas transparentes, > como si no existiesen) > > from PIL import ImageGrab > import time > > time.sleep(5) > box = (100,100,400,400) > ImageGrab.grab().crop(box).save("screen_capture.jpg", "JPEG") > > > *import* Image > *try*: > # built-in driver (1.1.3 and later) grabber = > Image.core.grabscreen*except* AttributeError: > # stand-alone driver (pil plus) *import* _grabscreen > grabber = _grabscreen.grab > ### (New in 1.1.3) Take a snapshot of the screen. The pixels inside the# > bounding box are returned as an "RGB" image. If the bounding box is# > omitted, the entire screen is copied.## @param bbox What region to copy. > Default is the entire screen.# @return An image# @since 1.1.3*def* > grab(bbox=None): > size, data = grabber() > im = Image.fromstring( > "RGB", size, data, > # RGB, 32-bit line padding, origo in lower left corner "raw", > "BGR", (size[0]*3 + 3) & -4, -1 > ) > *if* bbox: > im = im.crop(bbox) > *return* im > ### (New in 1.1.4) Take a snapshot of the clipboard image, if any.## @return > An image, a list of filenames, or None if the clipboard does# not contain > image data or filenames. Note that if a list is# returned, the filenames > may not represent image files.# @since 1.1.4*def* grabclipboard(): > debug = 0 # temporary interface data = Image.core.grabclipboard(debug) > *if* Image.isStringType(data): > *import* BmpImagePlugin, StringIO > *return* BmpImagePlugin.DibImageFile(StringIO.StringIO(data)) > *return* data > > > > import win32gui, win32ui, win32con, win32api > > > > > > hwnd = win32gui.GetDesktopWindow() > > > print hwnd > > > > > > # you can use this to capture only a specific window > > > #l, t, r, b = win32gui.GetWindowRect(hwnd) > > > #w = r - l > > > #h = b - t > > > > > > # get complete virtual screen including all monitors > > > SM_XVIRTUALSCREEN = 76 > > > SM_YVIRTUALSCREEN = 77 > > > SM_CXVIRTUALSCREEN = 78 > > > SM_CYVIRTUALSCREEN = 79 > > > w = vscreenwidth = win32api.GetSystemMetrics(SM_CXVIRTUALSCREEN) > > > h = vscreenheigth = win32api.GetSystemMetrics(SM_CYVIRTUALSCREEN) > > > l = vscreenx = win32api.GetSystemMetrics(SM_XVIRTUALSCREEN) > > > t = vscreeny = win32api.GetSystemMetrics(SM_YVIRTUALSCREEN) > > > r = l + w > > > b = t + h > > > > > > print l, t, r, b, ' -> ', w, h > > > > > > hwndDC = win32gui.GetWindowDC(hwnd) > > > mfcDC = win32ui.CreateDCFromHandle(hwndDC) > > > saveDC = mfcDC.CreateCompatibleDC() > > > > > > saveBitMap = win32ui.CreateBitmap() > > > saveBitMap.CreateCompatibleBitmap(mfcDC, w, h) > > > saveDC.SelectObject(saveBitMap) > > > saveDC.BitBlt((0, 0), (w, h), mfcDC, (l, t), win32con.SRCCOPY) > > > saveBitMap.SaveBitmapFile(saveDC, 'screencapture.bmp') > > > > > > > 1. import wx > 2. > 3. app = wx.PySimpleApp() > 4. > 5. context = wx.ScreenDC() > 6. r, b = context.GetSize() > 7. > 8. > # i have a second monitor left of my primary, so these value are negativ > 9. l, t = (-1280, -256) # coulfn't find a wx function to get these > 10. > 11. w, h = (r - l, b - t) > 12. bitmap = wx.EmptyBitmap(w, h, -1) > 13. > 14. memory = wx.MemoryDC() > 15. memory.SelectObject(bitmap) > 16. memory.Blit(0, 0, w, h, context, l, t) > 17. memory.SelectObject(wx.NullBitmap) > 18. > 19. #bitmap.SaveFile("screencapture.bmp", wx.BITMAP_TYPE_BMP) > 20. #bitmap.SaveFile("screencapture.jpg", wx.BITMAP_TYPE_JPEG) > 21. bitmap.SaveFile("screencapture.png", wx.BITMAP_TYPE_PNG) > > > > -- > *Josu Rodriguez Vilda* > * > * >
Lo he visto en [1] Con esto sí que parece funcionar (lo he probado con notepad++ abierto y con la ventana buscar abierta): >>> import sys >>> from PyQt4.QtGui import QPixmap, QApplication >>> app = QApplication(sys.argv) >>> QPixmap.grabWindow(QApplication.desktop().winId()).save('test.png','png') pero necesitas tener instalado PyQt4. La segunda opción que ponen en [1] no me ha funcionado y ocurre lo que tú dices, no graba la ventana buscar de notepad++: >>> import ImageGrab >>> img = ImageGrab.grab() >>> img.save('test.jpg', 'JPEG') [1] http://es.w3support.net/index.php?db=so&id=69645
_______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/