You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python唤醒休眠显示器以显示Tkinter告警弹窗?

在Win10下用Python唤醒休眠显示器并恢复Tkinter告警弹窗

要解决Win10休眠后Tkinter弹窗无法唤醒显示器的问题,需要通过系统级API触发用户活动事件,让系统识别到操作发生,从而唤醒显示器并重置休眠倒计时。以下是两种可行的实现方式:

方法1:模拟键盘按键事件(和Caffeine64原理一致)

通过模拟F15按键的按下/抬起操作,触发系统的用户活动检测,唤醒显示器并重置休眠倒计时。需要用到pywin32库调用Windows API:

  1. 先安装依赖:
pip install pywin32
  1. 实现唤醒函数:
import win32api
import win32con

def wake_up_display():
    # 模拟F15按键按下
    win32api.keybd_event(win32con.VK_F15, 0, 0, 0)
    # 模拟F15按键抬起
    win32api.keybd_event(win32con.VK_F15, 0, win32con.KEYEVENTF_KEYUP, 0)
  1. 在TCP包触发逻辑中调用:
# 收到TCP包时的处理流程
wake_up_display()
g.deiconify()
g.attributes('-topmost', True)
g.focus_force()

方法2:调用系统电源管理API临时激活系统

通过SetThreadExecutionState函数临时设置系统为活跃状态,唤醒显示器后再恢复默认状态,让系统继续正常的休眠逻辑:

import win32api
import win32con
import time

def wake_up_display():
    # 标记系统需要保持活跃,唤醒显示器
    active_state = win32con.ES_DISPLAY_REQUIRED | win32con.ES_SYSTEM_REQUIRED
    win32api.SetThreadExecutionState(active_state)
    # 短暂延迟确保显示器唤醒
    time.sleep(0.1)
    # 恢复系统默认状态,允许后续正常休眠
    win32api.SetThreadExecutionState(win32con.ES_CONTINUOUS)

为什么之前的Tkinter操作无效?

g.attributes('-topmost', True)和g.focus_force()仅针对窗口层级和焦点进行操作,不会触发Windows的用户活动检测机制,因此无法唤醒处于休眠状态的显示器。

注意事项

  • 测试时确保显示器进入的是休眠状态而非屏幕保护程序
  • 如果F15按键无效,可替换为其他不常用按键(如win32con.VK_SCROLL)或模拟鼠标移动事件
  • 无需管理员权限即可运行上述代码

内容的提问来源于stack exchange,提问作者isidore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 07:58:28