Windows11桌面解鎖守護腳本

使用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)。這些員工都是餐廳正常運轉所必需的,他們各自…