Python实现后台截屏工具和截屏图片浏览工具

Python实现后台截屏工具和截屏图片浏览工具

一、后台截屏工具

程序运行时有系统托盘图标。它会定期截取屏幕图像并保存,但当检测到白名单中的应用窗口处于打开状态时,会暂停截屏,避免在使用特定应用(如微信)时被截屏。

程序原理

  1. 定期截屏:程序会按照设定的时间间隔(默认5秒)自动截取整个屏幕并保存为PNG图片。
  2. 白名单机制:程序维护一个应用窗口标题的白名单,当这些窗口处于打开状态时,程序会暂停截屏。
  3. 命令行参数:用户可以通过命令行参数自定义截屏间隔、保存路径和额外的白名单应用。

如何使用

  1. 基本使用:直接运行程序,使用默认设置

python screenshot_program.py

  1. 自定义截屏间隔

python screenshot_program.py --sleep 10

这会将截屏间隔设置为10秒

  1. 自定义保存路径

python screenshot_program.py --save_path "C:/Screenshots"

  1. 添加自定义白名单

python screenshot_program.py --white_list "QQ,钉钉,Microsoft Word"

这会将QQ、钉钉和Microsoft Word添加到默认白名单中

  1. 组合使用

python screenshot_program.py --sleep 15 --save_path "C:/Screenshots" --white_list "QQ,钉钉"

当程序运行时,它会检查是否有白名单中的窗口处于打开状态。如果没有,则截取屏幕并保存;如果有,则跳过截屏,等待下一个时间间隔。

程序运行时有系统托盘图标(友好的用户使用体验)。你会在系统托盘中看到一个名为"屏幕截图服务"的图标,右键点击可以看到"暂停截屏"和"退出程序"两个选项。

本程序用到的模块/库:

  • threading、time、datetime、os、argparse:这些模块是 Python 的标准库,不需要单独安装。
  • 需要安装的模块有:

pystray:用于创建系统托盘图标。

Pillow(PIL):用于图像处理,代码中用于创建和操作图片。

pywin32:win32gui 和 win32con,用于调用 Windows API,例如窗口操作和屏幕捕获。

源码:

import pystray
from PIL import Image, ImageDraw
import threading
import time
import win32gui
import win32con
from PIL import ImageGrab
from datetime import datetime
import os
import argparse

# 解析命令行参数
parser = argparse.ArgumentParser(description="Screen Shot Service")
parser.add_argument("--sleep", type=int, default=5, help="截屏间隔时间 默认5秒")
parser.add_argument("--save_path", type=str, default="D:/doc/local/testPng", help="图片文件存储地址 默认D:/doc/local")
parser.add_argument("--white_list", type=str, default="", help="应用白名单 按,
### 使用Python实现后台程序的屏幕截图 为了实现后台运行并截取屏幕的功能,可以结合`Pillow`库用于图像处理以及`pyautogui`库用于模拟用户操作。对于确保程序能在后台稳定执行,可采用`nohup`命令配合Linux环境下的守护进程管理工具。 #### 方法一:基于PyAutoGUI与Pillow组合 此方案利用`pyautogui`获取当前屏幕快照,并通过`Pillow`保存图片到本地磁盘上[^1]。 ```python import pyautogui from PIL import ImageGrab def capture_screen(output_path='screenshot.png'): screenshot = pyautogui.screenshot() screenshot.save(output_path) capture_screen() # 调用函数进行截图,默认保存为'screenshot.png' ``` 上述代码片段展示了如何简单地捕获整个屏幕的内容并将之存储至指定路径下。 #### 方法二:借助Win32 API(适用于Windows平台) 如果目标操作系统是Windows,则可以直接调用系统的图形设备接口GDI来进行更底层的操作。这里给出一段使用win32guiwin32ui模块的例子: ```python import win32gui, win32ui, win32con, ctypes from PIL import Image def grab_window_screenshot(hwnd=None): hwndDC = win32gui.GetWindowDC(hwnd) mfcDC = win32ui.CreateDCFromHandle(hwndDC) saveDC = mfcDC.CreateCompatibleDC() width = GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN) height = GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN) saveBitMap = win32ui.CreateBitmap() saveBitMap.CreateCompatibleBitmap(mfcDC , width, height) saveDC.SelectObject(saveBitMap) result = windll.user32.PrintWindow(hwnd, saveDC.GetSafeHdc(), 0) bmpinfo = saveBitMap.GetInfo() bmpstr = saveBitMap.GetBitmapBits(True) im = Image.frombuffer( 'RGB', (bmpinfo['bmWidth'], bmpinfo['bmHeight']), bmpstr, 'raw', 'BGRX', 0, 1 ) win32gui.DeleteObject(saveBitMap.GetHandle()) saveDC.DeleteDC() mfcDC.DeleteDC() win32gui.ReleaseDC(hwnd, hwndDC) if result != 0: return im if __name__ == "__main__": img = grab_window_screenshot() if img is not None: img.save('window_capture.png') ``` 这段代码实现了对特定窗口或全屏范围内的内容抓取,并将其转换成PIL支持的对象以便进一步处理或保存[^2]。 为了让这些脚本能够在无人值守的情况下自动工作,在Unix-like系统中可以通过如下方式设置无挂起模式(`nohup`)使它们成为后台任务继续运行而不受终端关闭影响[^3]: ```bash nohup python -u your_script.py > output.log 2>&1 & ``` 这样即使断开SSH连接或其他形式的日志会话结束之后,该Python脚本仍然可以在服务器端保持活跃状态直至完成预定的任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习&实践爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值