新闻详情

新闻详情

首页 / 资讯中心 / 详情

Windows防锁屏技术:Python实现与API解析

发布时间:2026/11/5 14:13:05来源:尧图网络
Windows防锁屏技术:Python实现与API解析
1. Windows系统锁屏机制解析Windows操作系统的自动锁屏功能是企业环境中常见的安全策略也是个人电脑的默认节能设置。这个机制的核心目的是在用户离开电脑时保护隐私和节约能源。但实际工作中我们经常会遇到需要长时间保持屏幕开启的场景比如远程演示时保持连接状态运行耗时较长的数据处理任务观看视频教程或直播课程需要持续监控的自动化流程系统检测用户活动的原理是通过多种输入设备键盘、鼠标、触摸屏等的信号来判断。当超过设定的空闲时间默认为15分钟没有检测到活动时系统会依次触发关闭显示器节能进入睡眠模式进一步节能最终锁定会话安全保护有趣的是微软自家的PowerPoint在演示模式下会主动阻止这些节能行为。这启发我们可以模拟类似机制来实现自定义的防锁屏功能。2. 技术实现原理深度剖析2.1 Windows API关键函数实现防锁屏功能的核心是SetThreadExecutionState这个Windows API函数。这个函数属于kernel32.dll专门用于通知系统应用程序的状态需求。其函数原型为EXECUTION_STATE SetThreadExecutionState( EXECUTION_STATE esFlags );参数esFlags是位掩码组合主要包含以下标志位标志值十六进制值作用描述ES_CONTINUOUS0x80000000持续生效直到显式取消ES_SYSTEM_REQUIRED0x00000001防止系统进入睡眠模式但对显示器无影响ES_DISPLAY_REQUIRED0x00000002防止显示器关闭同时隐含ES_SYSTEM_REQUIRED效果ES_AWAYMODE_REQUIRED0x00000040启用离开模式需要Windows Vista及以上2.2 组合效果分析代码中使用的组合是ES_CONTINUOUS | ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED这会产生以下效果ES_CONTINUOUS确保设置持续有效直到程序显式取消ES_DISPLAY_REQUIRED阻止显示器关闭ES_SYSTEM_REQUIRED阻止系统进入睡眠状态这种组合与PowerPoint演示模式使用的机制完全相同是最可靠的防锁屏方案。3. Python实现完整解析3.1 核心代码实现import ctypes import sys import threading import time # Windows API 常量定义 ES_CONTINUOUS 0x80000000 ES_DISPLAY_REQUIRED 0x00000002 ES_SYSTEM_REQUIRED 0x00000001 def prevent_sleep(): 激活防锁屏状态 ctypes.windll.kernel32.SetThreadExecutionState( ES_CONTINUOUS | ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED ) def allow_sleep(): 恢复系统默认节能行为 ctypes.windll.kernel32.SetThreadExecutionState(ES_CONTINUOUS)重要提示必须调用allow_sleep()恢复默认设置否则即使程序退出防锁屏效果仍会持续3.2 系统托盘集成方案对于需要长期运行的工具系统托盘集成能极大提升使用体验try: from pystray import Icon, Menu, MenuItem from PIL import Image, ImageDraw HAS_TRAY True except ImportError: HAS_TRAY False def create_image(): 创建托盘图标 image Image.new(RGB, (64, 64), white) dc ImageDraw.Draw(image) dc.ellipse([8, 8, 56, 56], fillgreen, outlinedarkgreen, width2) return image def toggle_prevention(iconNone): 切换防锁屏状态 global preventing preventing not preventing (prevent_sleep if preventing else allow_sleep)() status 运行中 if preventing else 已暂停 print(f防锁屏状态{status}) if icon: icon.title f防锁屏 - {status}3.3 两种运行模式对比特性控制台版本托盘图标版本启动方式命令行直接运行后台静默运行状态切换需终止程序点击托盘菜单即可依赖项仅需ctypes需要pystray和Pillow适用场景临时使用/脚本调用长期驻留/频繁切换用户友好度低高4. 高级应用与优化技巧4.1 定时自动恢复机制为防止忘记关闭防锁屏功能可以添加自动恢复逻辑def auto_allow_sleep(minutes120): 定时自动恢复节能模式 time.sleep(minutes * 60) allow_sleep() print(f{minutes}分钟超时已自动恢复节能模式) sys.exit(0) # 在main函数中添加 threading.Thread(targetauto_allow_sleep, daemonTrue).start()4.2 多显示器环境处理对于多显示器配置可能需要额外处理def prevent_sleep_extended(): 增强版防锁屏适用于多显示器 ctypes.windll.kernel32.SetThreadExecutionState( ES_CONTINUOUS | ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED | 0x00000040 # ES_AWAYMODE_REQUIRED )4.3 系统电源策略检查def check_power_settings(): 检查当前电源设置是否允许防锁屏 import win32api # 需要pywin32 try: return win32api.GetPwrCapabilities().SystemS4 except: return True # 默认允许5. 常见问题与解决方案5.1 防锁屏失效场景排查现象可能原因解决方案显示器仍会关闭电源设置优先级更高检查电源选项中的关闭显示器时间系统进入睡眠组策略强制睡眠联系IT管理员调整策略程序退出后效果持续未调用allow_sleep()确保finally块调用恢复函数多显示器不同步未使用扩展模式标志添加ES_AWAYMODE_REQUIRED标志5.2 权限与兼容性问题管理员权限某些企业环境需要管理员权限才能修改执行状态import os if not ctypes.windll.shell32.IsUserAnAdmin(): print(需要管理员权限) os.system(runas /user:Administrator python script.py) sys.exit()系统版本兼容Windows XP及更早版本可能不支持所有标志位部分平板模式可能限制此功能5.3 资源占用优化长时间运行时的内存管理技巧def memory_optimizer(): 定期清理内存 while running: time.sleep(3600) # 每小时执行一次 if hasattr(ctypes, windll): ctypes.windll.psapi.EmptyWorkingSet(ctypes.windll.kernel32.GetCurrentProcess())6. 实际应用场景扩展6.1 与自动化工具集成def auto_lock_controller(condition_func): 根据条件自动控制锁屏 while True: if condition_func(): # 自定义条件判断 prevent_sleep() else: allow_sleep() time.sleep(60)6.2 远程桌面增强针对远程桌面会话的特殊处理def is_remote_session(): 检测是否在远程会话中 return ctypes.windll.kernel32.GetSystemMetrics(0x1000) ! 0 # SM_REMOTESESSION if is_remote_session(): prevent_sleep() # 远程时始终保持活跃6.3 游戏模式兼容def gaming_mode_enable(): 游戏模式下的特殊处理 ctypes.windll.kernel32.SetThreadExecutionState( 0x80000000 | 0x00000002 | 0x00000001 | 0x00000040 )我在实际使用中发现将防锁屏工具与任务计划程序结合最为可靠。可以创建一个每小时运行的短脚本既保证效果持续又避免长期运行的内存问题。对于开发人员建议将核心功能封装成类方便其他Python程序调用class SleepPreventer: def __init__(self): self._active False def __enter__(self): self.prevent() return self def __exit__(self, *args): self.allow() def prevent(self): if not self._active: prevent_sleep() self._active True def allow(self): if self._active: allow_sleep() self._active False这样就能通过with语句安全使用with SleepPreventer(): # 执行长时间任务 time.sleep(3600) # 1小时任务
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/4 15:56:54

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/4 22:55:41

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/4 17:01:23

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/4 12:33:12

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/5 4:24:57

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/5 4:24:57

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉