截图
截图自动保存定时截图保存截图自动保存
双击快速截图并自动保存。
时间戳相关
截图方法比较
截图的代码如下,grab_picture.py
import timeimport datetimeimport win32gui, win32ui, win32con, win32apidef window_capture(filename):hwnd = 0 # 窗口的编号,0号表示当前活跃窗口# 根据窗口句柄获取窗口的设备上下文DC(Divice Context)hwndDC = win32gui.GetWindowDC(hwnd)# 根据窗口的DC获取mfcDCmfcDC = win32ui.CreateDCFromHandle(hwndDC)# mfcDC创建可兼容的DCsaveDC = mfcDC.CreateCompatibleDC()# 创建bigmap准备保存图片saveBitMap = win32ui.CreateBitmap()# 获取监控器信息MoniterDev = win32api.EnumDisplayMonitors(None, None)w = int(MoniterDev[0][2][2]*1.25)h = int(MoniterDev[0][2][3]*1.25)# print w,h#图片大小# 为bitmap开辟空间saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)# 高度saveDC,将截图保存到saveBitmap中saveDC.SelectObject(saveBitMap)# 截取从左上角(0,0)长宽为(w,h)的图片saveDC.BitBlt((0, 0), (w, h), mfcDC, (0, 0), win32con.SRCCOPY)saveBitMap.SaveBitmapFile(saveDC, filename)beg = time.time()'''for i in range(10):file_date = time.strftime("%Y-%m-%d_%H_%M_%S", time.localtime())file_date = file_date+".jpg"print(file_date)window_capture(file_date )'''file_date = time.strftime("%Y-%m-%d_%H_%M_%S", time.localtime())+".jpg"window_capture(file_date )#end = time.time()
上述源码中,由于本机是将文字显示比例放大为125%,故这里需乘上1.25,未放大,取消倍率设置。
源码中注释部分为:连续打印10张图(实际上太快,只有1~2张)的
打包前的权限设置:
Win + R : regedit
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System
修改这个路径下的键值:EnableLUA 从1 设置为0
pyinstaller打包相关
打包的命令:
pyinstaller -F -w .\grab_picture.py
参数解释:
-F:打包后只生成单个exe格式文件;-D:默认选项,创建一个目录,包含exe文件以及大量依赖文件;-c:默认选项,使用控制台(就是类似cmd的黑框);-w:不使用控制台;-p:添加搜索路径,让其找到对应的库;-i:改变生成程序的icon图标。
打包后,在dist目录下有可执行文件,发送快捷图标至桌面,属性中设置快捷键为Ctrl+Alt+J。即可自动截图并保存,文件名为时间戳。
定时截图保存
记录时间:1000张图片×0.5s=500s
也可以自己改,不同设备上注意修改分辨率设置,,
代码:
import timeimport datetimeimport win32gui, win32ui, win32con, win32apidef window_capture(filename):hwnd = 0 # 窗口的编号,0号表示当前活跃窗口# 根据窗口句柄获取窗口的设备上下文DC(Divice Context)hwndDC = win32gui.GetWindowDC(hwnd)# 根据窗口的DC获取mfcDCmfcDC = win32ui.CreateDCFromHandle(hwndDC)# mfcDC创建可兼容的DCsaveDC = mfcDC.CreateCompatibleDC()# 创建bigmap准备保存图片saveBitMap = win32ui.CreateBitmap()# 获取监控器信息MoniterDev = win32api.EnumDisplayMonitors(None, None)w = int(MoniterDev[0][2][2]*1.25)h = int(MoniterDev[0][2][3]*1.25)# print w,h#图片大小# 为bitmap开辟空间saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)# 高度saveDC,将截图保存到saveBitmap中saveDC.SelectObject(saveBitMap)# 截取从左上角(0,0)长宽为(w,h)的图片saveDC.BitBlt((0, 0), (w, h), mfcDC, (0, 0), win32con.SRCCOPY)saveBitMap.SaveBitmapFile(saveDC, filename)beg = time.time()for i in range(1000):time.sleep(0.5)file_date = time.strftime("%Y-%m-%d_%H_%M_%S", time.localtime())file_date = file_date+ str(i) +".jpg"print(file_date)window_capture(file_date)'''file_date = time.strftime("%Y-%m-%d_%H_%M_%S", time.localtime())+".jpg"window_capture(file_date )'''print('done!')#end = time.time()
使用无命令窗口提示参数编译后,想要在截图完毕之前结束,可在任务管理器中结束 grab_picture.exe