2011-01-03 4 views
16

私はpythonを使用してスクリーンショットを撮りたいと思います。Python windows 7 screenshot without PIL

私はPILを使用しようとしましたが、私は64ビットのウィンドウとPythonを使用しているので、PILは機能しません(私は32ビットPILのバージョンしか見つけることができませんでした)。私はPython 2.7.1を使っています。

私はスクリーンショットを撮りたいと思いますが、スピードが1秒間に1秒以上かかることができれば、どのようにしても問題ありません。好ましくは、それはスクリーンショットをとる領域を切り取ることができるはずであるが、それは最重要ではない。

私は64ビットで動作しているようですが、多くのことは互換性がないようです。可能であれば、私は32ビットに戻っていきたいと思っています。 これを実行できるプログラムまたはモジュールはありますか?

+1

32のPythonを使用しない理由は? –

答えて

30

win-amd64-py2.7のPILをhttp://www.lfd.uci.edu/~gohlke/pythonlibs/#pilにしてください。

from PIL import ImageGrab 
im = ImageGrab.grab() 
im.save('screenshot.png') 

更新:複数の仮想画面のスクリーンショットを取る代わりに、PILのpywin32(http://sourceforge.net/projects/pywin32/)を使用します。

import win32gui, win32ui, win32con, win32api 
hwin = win32gui.GetDesktopWindow() 
width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN) 
height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN) 
left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN) 
top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN) 
hwindc = win32gui.GetWindowDC(hwin) 
srcdc = win32ui.CreateDCFromHandle(hwindc) 
memdc = srcdc.CreateCompatibleDC() 
bmp = win32ui.CreateBitmap() 
bmp.CreateCompatibleBitmap(srcdc, width, height) 
memdc.SelectObject(bmp) 
memdc.BitBlt((0, 0), (width, height), srcdc, (left, top), win32con.SRCCOPY) 
bmp.SaveBitmapFile(memdc, 'screenshot.bmp') 
+4

...あなたがリンク先のサイトを担当している場合は、名前をつけてください!私は64ビットでSciPyを正しくコンパイルしようとしていると狂っていた;-) –

+0

ありがとう!そのPILバージョンはまさに私が探していたものでしたが、見つけられませんでした。 win32guiでは、複数の仮想スクリーンのスクリーンショットを取ることはどういう意味ですか?私がやってみたいのは、画面の一部のスクリーンショットを繰り返し取ることです.PILでもそれを行うことができますか、それともpywin32が良いでしょうか? (pywin32は64bit python/windows7で動作しますか?その名前は誤解を招くものです:)) – Max

+0

ImageGrab.grab()はオプションのbbox引数をとります(http://www.pythonware.com/library/pil/handbook/imagegrab。 htm)。 – cgohlke

1

32ビットまたは64ビットWindowsはここでは無関係です。それは重要なPythonとそのモジュールの「ビットネーム」です。 32ビットコンパイルされたPythonを実行している場合、32ビットコンパイルされたPILは64ビットWindows上でうまく動作します。

一方、64ビットコンパイル済みPythonを実行している場合は、64ビットコンパイル済みのPILのバージョンを検索またはカスタムコンパイルして一致させる必要があります。

編集:

あなたはhttp://www.lfd.uci.edu/~gohlke/pythonlibs/からPILの64ビットコンパイルされたバージョンをダウンロードすることができます - 具体的には、あなたが望むPIL-1.1.7.win-AMD64-py2.7.exeを

+0

ありがとう、ありがとう!これはまさに私が探していたものですが、見つけられませんでした。 – Max