在无PIL情况下在Windows 7上截屏的Python方法
我想用Python来截屏。
我试过用PIL这个库,但因为我在用64位的Windows,而Python的PIL在这上面不太好用(我只找到32位的版本)。顺便说一下,我用的是Python 2.7.1。
我想截屏,方式无所谓,只要速度能超过每秒1张就行。最好还能裁剪一下截屏的区域,不过这不是最重要的。
主要的问题是我在用64位系统,很多东西似乎都不兼容。我其实不太想回到32位的系统,如果可以的话。有没有什么程序或者模块可以做到这个?
3 个回答
我在使用PIL或者pyscreenshot的时候遇到了同样的问题,这里是我解决的方法。
右键点击python.exe,选择“属性”,然后找到“兼容性”选项卡,勾选“在高DPI设置下禁用显示缩放”。对pythonw.exe也重复这个操作。
这里提到的32位或64位的Windows系统其实没什么关系,关键在于Python和它的模块是32位还是64位。如果你使用的是32位的Python,那么在64位的Windows上,32位的PIL模块也能正常工作。
但如果你使用的是64位的Python,那么你就需要找到或者自己编译一个64位的PIL模块来配合使用。
补充:
你可以从这个网站下载64位的PIL模块:http://www.lfd.uci.edu/~gohlke/pythonlibs/,具体来说,你需要下载PIL-1.1.7.win-amd64-py2.7.exe这个文件。
要在win-amd64-py2.7上获取PIL库,可以访问这个链接:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pil。
from PIL import ImageGrab
im = ImageGrab.grab()
im.save('screenshot.png')
更新:如果你想要截取多个虚拟屏幕的截图,可以使用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')