如何利用python制作一个自动休眠Win的工具

本文介绍了如何用Python编写一个自动休眠Windows系统的工具,包括界面设计、功能实现、代码编写和部署步骤。该工具在每天8点自动运行,提供倒计时提醒,用户可选择重置、加时或取消休眠,界面采用Tkinter实现,可置顶并拖动,且隐藏命令行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近日,公司供电不稳定,时不时断电,对台式机很不友好。在经历了两次早晨一来发现电脑前一晚被强行断电关机的不愉快后,我决定写一个晚上可以自动把电脑休眠的工具。

最终成品图如下:
焦点获取状态

下面是施工过程:

一、任务目标与分析

任务目标:

  • 每晚8点自动运行
  • 执行休眠动作前倒计时提醒
  • 可以取消休眠,可以把倒计时加时,可以重置倒计时时间
  • 倒计时以界面的方式出现(而不是命令行),且置顶+不可关闭,窗体可拖动

分析

二、界面设计/功能设计

1、界面大小与常见的右下角悬浮窗类似。
2、界面有三个按钮对应三个小功能,分别是“重置“、”加时“、”取消“。
3、为了不影响正常工作,界面应置顶且有一定的透明度,界面不在焦点时应把透明度进一步调低。界面应可拖动。
4、为了美观,应把python运行的命令行隐藏,将状态栏和标题栏隐藏。

三、代码实现

代码主要分为两个部分:窗体模块和计时模块

1、窗体模块:

(1) 隐藏命令行显示:
# 隐藏命令行窗口
import ctypes
#调用kernel32.dll获取当前命令行的句柄
whnd = ctypes.windll.kernel32.GetConsoleWindow()
if whnd != 0:
    #隐藏命令行窗口
    ctypes.windll.user32.ShowWindow(whnd, 0)
    #释放句柄资源(句柄类似于指针,这里只关闭了句柄,并不关闭线程)
    ctypes.windll.kernel32.CloseHandle(whnd)
(2) 界面

界面使用tkinter组件
依赖的包:

import tkinter
from tkinter import *

获取焦点、获取鼠标动作等事件需要将窗体绑定windows事件。窗体的绑定事件代码格式为:
root.bind("<B1-Motion>", change)

设定窗体的各项参数:

#创建根窗体
root = tkinter.Tk()

#初始化窗体
def tkinterInit():
    # 设定位置
    root.geometry('260x120-10-40')
    # UI窗口置于顶层
    root.wm_attributes('-topmost', 1)
    #标题栏标题
    root.title("即将休眠")
    # 背景色
    root["background"] = "white"
    # 设置透明度
    root.attributes("-alpha", 0.8)
    # 绑定win鼠标移动事件
    # <B1-Motion> 拖动左键触发事件
    # <B2-Motion> 拖动中键触发事件
    # <B3-Motion> 拖动右键触发事件
    root.bind("<B1-Motion>", change)
    # 鼠标左键按下,2表示中键,3表示右键;
    root.bind("<Button-1>", btnDown)
    # 获取焦点
    root.bind("<FocusIn>", focusIn)
    # 失去焦点
    root.bind("<FocusOut>", focusOut)

    # 不可改变窗口大小
    root.resizable(False, False)
    # 设置窗口为工具样式:
    # root.attributes("-toolwindow", True)
    # # 设置全屏:
    # root.attributes("-fullscreen", True)
    # 设置成脱离工具栏样式(取消标题栏和状态栏图标)
    root.overrideredirect(True)

创建窗口上的其他组件:

#创建窗口
def startTkinter():
    global timer
    tkinterInit()
    # 提示标签
    title = Label(root, text='距离休眠时间还有:', bg="white")
    # 时间显示标签
    timer = Label(root, textvariable=nowTime, fg="red", bg="white", font="黑体")
    #1000ms后调用updateTime函数
    timer.after(1000, updateTime)

    # “重置”与“加时”按钮需要在一行,故把两个按钮放入一个框架内。
    frame = tkinter.Frame(root)
    #按钮方法需要使用函数名(不带括号)或lambda表达式调用函数
    resetBtn = Button(frame, text='重置'
                      , command=resetTime
                      , width
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值