截图自动保存
双击快速截图并自动保存。
时间戳相关
截图方法比较
截图的代码如下,grab_picture.py
import time
import datetime
import win32gui, win32ui, win32con, win32api
def window_capture(filename):
hwnd = 0 # 窗口的编号,0号表示当前活跃窗口
# 根据窗口句柄获取窗口的设备上下文DC(Divice Context)
hwndDC = win32gui.GetWindowDC(hwnd)
# 根据窗口的DC获取mfcDC
mfcDC = win32ui.CreateDCFromHandle(hwndDC)
# mfcDC创建可兼容的DC
saveDC = 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 time
import datetime
import win32gui, win32ui, win32con, win32api
def window_capture(filename):
hwnd = 0 # 窗口的编号,0号表示当前活跃窗口
# 根据窗口句柄获取窗口的设备上下文DC(Divice Context)
hwndDC = win32gui.GetWindowDC(hwnd)
# 根据窗口的DC获取mfcDC
mfcDC = win32ui.CreateDCFromHandle(hwndDC)
# mfcDC创建可兼容的DC
saveDC = 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