使用python程序加bat一键运行脚本,妈妈再也不用担心我的电脑桌面了


import os
import time
import cv2
import pyautogui
import psutil
from datetime import datetimeclass UnlockMonitor:def __init__(self):"""初始化监控器"""self.save_dir = os.path.dirname(os.path.abspath(__file__))self.log_file = os.path.join(self.save_dir, "unlock_capture_log.txt")self.last_state = self.is_locked()self.running = Truedef log_message(self, message):"""记录日志到文件和终端"""timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")log_entry = f"[{timestamp}] {message}"print(log_entry)try:with open(self.log_file, "a", encoding="utf-8") as f:f.write(log_entry + "\n")except Exception as e:print(f"[{timestamp}] 写入日志失败: {str(e)}")def is_camera_available(self):"""检查摄像头是否可用"""try:cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)if not cap.isOpened():return Falsecap.release()return Trueexcept Exception as e:self.log_message(f"摄像头检测异常: {str(e)}")return Falsedef capture_camera(self):"""直接拍照(不对图像做任何处理)"""timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")camera_path = os.path.join(self.save_dir, f"camera_{timestamp}.jpg")try:cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)# 基本摄像头设置cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)cap.set(cv2.CAP_PROP_AUTOFOCUS, 1)  # 启用自动对焦# 等待摄像头对焦(2秒)time.sleep(2)if not cap.isOpened():self.log_message("无法打开摄像头")return# 直接拍摄单帧ret, frame = cap.read()cap.release()if ret:cv2.imwrite(camera_path, frame)self.log_message(f"拍照保存至: {camera_path}")else:self.log_message("摄像头读取失败")except Exception as e:self.log_message(f"拍照异常: {str(e)}")def capture_screenshot(self):"""截屏"""timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")screenshot_path = os.path.join(self.save_dir, f"screenshot_{timestamp}.png")try:screenshot = pyautogui.screenshot()screenshot.save(screenshot_path)self.log_message(f"截屏保存至: {screenshot_path}")except Exception as e:self.log_message(f"截屏失败: {str(e)}")def is_already_running(self):"""检查是否已有相同进程在运行"""current_pid = os.getpid()script_name = os.path.basename(__file__)for proc in psutil.process_iter(['pid', 'name', 'cmdline']):try:if (proc.info['pid'] != current_pid and proc.info['cmdline'] and script_name in ' '.join(proc.info['cmdline'])):return Trueexcept (psutil.NoSuchProcess, psutil.AccessDenied, KeyError):continuereturn Falsedef is_locked(self):"""检查系统是否处于锁定状态"""try:for proc in psutil.process_iter(['name']):if proc.info['name'] == 'LogonUI.exe':return Truereturn Falseexcept Exception:return Falsedef run(self):"""主监控循环"""if self.is_already_running():self.log_message("已有实例运行,退出当前进程")returnself.log_message("===== 解锁监控服务启动 =====")self.log_message(f"初始状态: {'锁定' if self.last_state else '解锁'}")try:while self.running:current_state = self.is_locked()# 检测解锁事件if self.last_state and not current_state:self.log_message("检测到解锁事件,开始捕获...")if self.is_camera_available():self.capture_camera()self.capture_screenshot()self.last_state = current_statetime.sleep(1)  # 检测间隔except KeyboardInterrupt:self.log_message("服务被用户中断")except Exception as e:self.log_message(f"服务异常: {str(e)}")finally:self.log_message("===== 监控服务停止 =====")if __name__ == '__main__':monitor = UnlockMonitor()monitor.run()

@echo off
chcp 65001 > nul
title 解锁拍照监控服务
color 0A:: 设置循环标志
set RESTART_COUNT=0:restart
echo 正在启动解锁拍照监控服务... (第%RESTART_COUNT%次启动)
echo 按 Ctrl+C 停止服务:: 设置Python路径(根据您的环境修改)
set PYTHON_PATH="C:\Users\lhyyds\.conda\envs\hust\python.exe":: 设置脚本路径
set SCRIPT_PATH="%~dp0wake_monitor.py":: 启动Python脚本
%PYTHON_PATH% %SCRIPT_PATH%:: 检查是否需要重启
set /a RESTART_COUNT+=1
echo 服务意外停止,5秒后自动重启...
timeout /t 5 /nobreak >nul
goto restartecho 服务已手动停止
pause

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/88440.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88440.shtml
英文地址,请注明出处:http://en.pswp.cn/web/88440.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux Ubuntu系统的用户管理

一.关于root用户默认我们安装完系统后 注册的用户就是管理员用户标识符 $ 管理员标识符#最高管理员在Ubuntu系统中,root是最高管理员,拥有最大的权限,默认情况下root用户没有启用密码,而是通过sudo机制来获取管理员权限二.Ubuntu系统中root用户的默认状态root用户存在,但未启用…

ROS1学习第三弹

ROS1学习第二弹 本文纯属记录学习过程,所学教程来自B站古月居ROS入门21讲 tf工具的使用 命令行中 1.rosrun tf view_frames 生成当前各个坐标的结构图,导出pdf文件到当前终端所在文件夹下面2.rosrun rviz rviz -d rospackage find turtle_tf /rviz/tu…

技术演进中的开发沉思-30 MFC系列:五大机制

MFC,记得我刚毕业时在 CRT 显示器前敲下第一行 MFC 代码时,那时什么都不懂,没有框架的概念。只觉得眼前的 CObject 像位沉默且复杂的大家族, 就像老北京胡同里的大家族,每个门牌号都藏着自己的故事。但现在看看&#x…

机器学习-06(Optimization-自动调整学习率)

临界点其实不一定是在训练神经网络过程中遇到的最大阻碍。随着对参数的不断更新,Loss值会不断下降,直至几乎没有变化,不再下降。当参数更新到临界点时,意味着gradient非常小,所以要认定参数是否到达临界点应当确认grad…

Uniapp中的uni.scss

uni.scss为uni-app新建项目自带工程文件,使用的预处理器为sass/scss,由此可见,uni-app官方推荐的是scss。 uni.scss特点 无需引入,uni-app在编译时,会自动引入此文件在此中定义的scss变量,可以全局使用&…

PreparedStatement 实现分页查询详解

PreparedStatement 实现分页查询详解 在 JDBC 中使用 PreparedStatement 实现分页查询是高效安全的方式,可以避免 SQL 注入并提升性能。下面我将详细说明实现步骤和原理。 📐 分页查询核心参数参数名说明计算公式pageNum当前页码(从1开始&…

ClamAV 和 FreshClam:Linux 服务器上的开源杀毒解决方案

ClamAV 和 FreshClam:Linux 服务器上的开源杀毒解决方案 1. 概述 ClamAV 是一款开源的防病毒引擎,专为 Linux 服务器设计,用于检测恶意软件、病毒、木马和其他安全威胁。它广泛应用于邮件服务器、文件存储系统和 Web 服务器,提供高效的病毒扫描功能。 主要特点: 免费开…

PySpark中python环境打包和JAR包依赖

在 PySpark 中打包 Python 环境并调度到集群是处理依赖一致性的关键步骤。以下是完整的解决方案,包含环境打包、分发和配置方法: 一、环境打包方法 使用 Conda 打包环境 # 创建 Conda 环境 conda create -n pyspark_env python3.8 conda activate pyspar…

和鲸社区深度学习基础训练营2025年关卡2(1)纯numpy

拟分3种实现方法:1.纯numpy2.sklearn中的MLPClassifier3.pytorch题目: 在 MNIST 数据集上训练 MLP 模型并比较不同的激活函数和优化算法任务描述:使用 MNIST 数据集中的前 20,000 个样本训练一个多层感知机 (MLP) 模型。你需要比较三种不同的…

Sequential Thinking:AI深度思考的新范式及其与CoT、ReAct的对比分析

引言:AI深度思考的演进与Sequential Thinking的崛起在人工智能技术快速发展的今天,AI模型的思考能力正经历着从简单应答到深度推理的革命性转变。这一演进过程不仅反映了技术本身的进步,更体现了人类对机器智能认知边界的持续探索。早期的大语…

云原生详解:构建现代化应用的未来

引言 在数字化转型的浪潮中,"云原生"已成为技术领域最热门的话题之一。从初创公司到全球500强企业,都在积极探索云原生技术以提升业务敏捷性和创新能力。本文将全面解析云原生的概念、核心技术、优势以及实践路径,帮助您深入理解这一改变IT格局的技术范式。 什么…

SSE事件流简单示例

文章目录1、推送-SseEmitter2、接收-EventSourceListenerSSE(Server-Sent Events,服务器推送事件)是一种基于HTTP的服务器向客户端实时推送数据的技术标准。1、推送-SseEmitter SseEmitter用于实现服务器向客户端单向、长连接的实时数据推送…

Elasticsearch RESTful API入门:基础搜索与查询DSL

Elasticsearch RESTful API入门:基础搜索与查询DSL 本文为Elasticsearch初学者详细解析RESTful API的核心操作与查询DSL语法,包含大量实战示例及最佳实践。 一、Elasticsearch与RESTful API简介 Elasticsearch(ES)作为分布式搜索…

(六)复习(OutBox Message)

文章目录 项目地址一、OutBox Message1.1 OutBox表配置1. OutBoxMessage类2. OutboxMessage表配置3. 给每个模块生成outboxmessage表1.2 发布OutBox Message1. 修改Intercepotor2. 配置Quartz3. 创建Quatz方法发布领域事件4. 创建Quatz定时任务5. 注册Quatz服务和配置6. 流程梳…

STM32-ADC内部温度

在通道16无引脚(测量温度不准确)跟ADC代码差不多;不需要使能引脚时钟;将内部温度测量打开/*** brief 启用或禁用温度传感器和内部参考电压功能* param NewState: 新的功能状态,取值为ENABLE或DISABLE* retval 无* no…

「Linux命令基础」文本模式系统关闭与重启

关机重启基本命令 直接拔掉计算机电源可能损坏内部元件;Linux系统通过命令关闭计算机则是安全流程,让所有程序有机会保存数据、释放资源。 关机命令:shutdown Linux系统提供了多种用于关闭或重启系统的命令,其中 shutdown 是最常用的一种,它可以安全地通知用户系统即将…

射频信号(大宽高比)时频图目标检测anchors配置

一、大宽高比目标YOLO检测参数设置 这是yolov7的一个label的txt文件: 1 0.500 0.201 1.000 0.091 2 0.500 0.402 1.000 0.150 3 0.500 0.604 1.000 0.093 0 0.500 0.804 1.000 0.217 对应的样本: 长宽比分别是:1/0.09110.98, 1/0.1506.67…

OpenStack 鉴权服务介绍.md

引言 OpenStack是一个开源的云计算管理平台,其中的Keystone组件承担了身份认证和授权的关键任务。Keystone的主要功能包括管理用户及其权限、维护OpenStack Services的Endpoint,以及实现认证(Authentication)和鉴权(Au…

Linux_3:进程间通信

IPC1.什么是IPC?Inter Process Communication2.进程间通信常用的几种方式1,管道通信:有名管道,无名管道2,信号- 系统开销小3,消息队列-内核的链表4,信号量-计数器5,共享内存6&#x…

【Springboot】Bean解释

在 Spring Boot 中,Bean 就像是你餐厅里的一名员工。比如,你有一名服务员(Service)、一名厨师(Chef)和一名收银员(Cashier)。这些员工都是餐厅正常运转所必需的,他们各自…