python工具-截图自动保存

该博客分享了一段Python代码,用于实现自动截图并保存的功能。代码能够双击快速截图,并可设置时间间隔定时保存,文件名带有时间戳。此外,还提供了PyInstaller打包命令,将脚本转换为可执行文件,并设置了快捷键。用户可以根据需要调整截图频率和分辨率适应不同设备。
摘要由CSDN通过智能技术生成

截图自动保存

双击快速截图并自动保存。
时间戳相关
截图方法比较
截图的代码如下,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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值