最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python設(shè)置電腦定時(shí)關(guān)機(jī)的方法詳解(附完整代碼)

 更新時(shí)間:2026年01月09日 08:58:01   作者:PieroPC  
這篇文章主要為大家詳細(xì)介紹了Python設(shè)置電腦定時(shí)關(guān)機(jī)的相關(guān)方法,從簡單到高級,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

為電腦設(shè)置定時(shí)關(guān)機(jī)有多種方法,從簡單到高級,您可以根據(jù)自己的需求選擇。

方法一:使用 Windows 自帶的命令(最簡單通用)

這是最經(jīng)典、最靈活的方法,適用于所有 Windows 系統(tǒng)。

1.打開“運(yùn)行”對話框

  • 按鍵盤上的 Win + R 鍵。
  • 或者在開始菜單搜索“運(yùn)行”。

2.輸入關(guān)機(jī)命令

在打開的運(yùn)行框中,輸入以下命令:

shutdown -s -t 秒數(shù)

shutdown:關(guān)機(jī)命令。

-s:表示關(guān)閉計(jì)算機(jī)。

-t:后面跟延遲時(shí)間。

秒數(shù):指定多少秒后關(guān)機(jī)。例如:

  • 1小時(shí)后關(guān)機(jī):shutdown -s -t 3600 (1小時(shí) = 60分鐘 × 60秒)
  • 2小時(shí)后關(guān)機(jī):shutdown -s -t 7200
  • 30分鐘后關(guān)機(jī):shutdown -s -t 1800
  • 晚上11點(diǎn)關(guān)機(jī)(假設(shè)現(xiàn)在晚上10點(diǎn)):shutdown -s -t 3600

3.執(zhí)行命令

  • 點(diǎn)擊“確定”或按回車鍵。
  • 成功后會(huì)彈出一個(gè)小窗口提示“Windows 將在 XX 分鐘后關(guān)閉”。

如何取消定時(shí)關(guān)機(jī)?

同樣打開“運(yùn)行” (Win + R),輸入:

shutdown -a

按回車。系統(tǒng)會(huì)提示“計(jì)劃的關(guān)閉已取消”。

方法二:創(chuàng)建定時(shí)關(guān)機(jī)的快捷方式(一鍵啟動(dòng))

如果您需要頻繁使用某個(gè)固定的時(shí)間(如下載大文件常用2小時(shí)),可以創(chuàng)建一個(gè)桌面快捷方式。

  • 在桌面空白處點(diǎn)擊右鍵,選擇 新建 -> 快捷方式。
  • 在“請輸入對象的位置”框中,輸入命令,例如: shutdown -s -t 7200 (這里以2小時(shí)/7200秒為例)
  • 點(diǎn)擊 下一步,為這個(gè)快捷方式起個(gè)名字,例如“2小時(shí)后關(guān)機(jī)”。
  • 點(diǎn)擊 完成

現(xiàn)在,只需雙擊這個(gè)桌面圖標(biāo),就會(huì)啟動(dòng)2小時(shí)后關(guān)機(jī)的命令。

方法三:使用任務(wù)計(jì)劃程序(精確到具體日期和時(shí)間)

如果你想要像設(shè)置鬧鐘一樣,讓電腦在每天晚上11點(diǎn)每周五下午5點(diǎn)自動(dòng)關(guān)機(jī),這是最專業(yè)的方法。

  1. 在開始菜單搜索并打開 “任務(wù)計(jì)劃程序”。
  2. 在右側(cè)操作欄,點(diǎn)擊 “創(chuàng)建基本任務(wù)”。
  3. 設(shè)置名稱和描述:例如“每日自動(dòng)關(guān)機(jī)”,點(diǎn)擊下一步。
  4. 選擇觸發(fā)器:選擇“每天”、“每周”或“一次”,點(diǎn)擊下一步。
    • 如果選“每天”,設(shè)置開始日期和具體時(shí)間(如23:00)。
  5. 選擇操作:選擇“啟動(dòng)程序”,點(diǎn)擊下一步。
  6. 設(shè)置程序或腳本
    • 在“程序或腳本”框中輸入:shutdown
    • 在“添加參數(shù)”框中輸入:-s -f-f 表示強(qiáng)制關(guān)閉正在運(yùn)行的應(yīng)用程序)
    • 注意:這里不需要 -t 參數(shù),因?yàn)橛|發(fā)時(shí)間由任務(wù)計(jì)劃控制。
  7. 點(diǎn)擊下一步,然后完成。

這樣,電腦就會(huì)在你設(shè)定的周期和時(shí)間點(diǎn)自動(dòng)關(guān)機(jī)。

方法四:python代碼實(shí)現(xiàn)

實(shí)現(xiàn)代碼

下面是一個(gè)使用 Python tkinter 實(shí)現(xiàn)前三種定時(shí)關(guān)機(jī)方法的完整程序:

import tkinter as tk
from tkinter import ttk, messagebox
import os
import time
import subprocess
import threading
from datetime import datetime, timedelta

class ShutdownTimerApp:
    def __init__(self, root):
        self.root = root
        self.root.title("定時(shí)關(guān)機(jī)工具 v1.0")
        self.root.geometry("600x500")
        
        # 設(shè)置樣式
        self.setup_styles()
        
        # 創(chuàng)建主界面
        self.create_widgets()
        
        # 存儲(chǔ)定時(shí)任務(wù)線程
        self.shutdown_thread = None
        self.is_scheduled = False
        
    def setup_styles(self):
        """設(shè)置界面樣式"""
        style = ttk.Style()
        style.configure('Title.TLabel', font=('微軟雅黑', 16, 'bold'))
        style.configure('Method.TLabelframe.Label', font=('微軟雅黑', 11, 'bold'))
        style.configure('Large.TButton', font=('微軟雅黑', 10))
        
    def create_widgets(self):
        """創(chuàng)建界面組件"""
        # 標(biāo)題
        title_label = ttk.Label(self.root, text="定時(shí)關(guān)機(jī)工具", style='Title.TLabel')
        title_label.pack(pady=20)
        
        # 創(chuàng)建筆記本控件(選項(xiàng)卡)
        self.notebook = ttk.Notebook(self.root)
        self.notebook.pack(fill='both', expand=True, padx=20, pady=10)
        
        # 方法一:使用命令
        self.create_method1_tab()
        
        # 方法二:快捷方式
        self.create_method2_tab()
        
        # 方法三:任務(wù)計(jì)劃(簡化版)
        self.create_method3_tab()
        
        # 狀態(tài)欄
        self.create_status_bar()
        
    def create_method1_tab(self):
        """創(chuàng)建方法一選項(xiàng)卡:使用命令"""
        frame = ttk.Frame(self.notebook)
        self.notebook.add(frame, text="方法一:命令行設(shè)置")
        
        # 說明標(biāo)簽
        desc = "通過Windows shutdown命令設(shè)置定時(shí)關(guān)機(jī)\n支持設(shè)置任意秒數(shù)后關(guān)機(jī)"
        desc_label = ttk.Label(frame, text=desc, font=('微軟雅黑', 10))
        desc_label.pack(pady=10)
        
        # 時(shí)間設(shè)置區(qū)域
        time_frame = ttk.LabelFrame(frame, text="設(shè)置關(guān)機(jī)時(shí)間", style='Method.TLabelframe')
        time_frame.pack(fill='x', padx=20, pady=10)
        
        # 預(yù)設(shè)時(shí)間按鈕
        preset_frame = ttk.Frame(time_frame)
        preset_frame.pack(pady=10)
        
        preset_times = [
            ("30分鐘后", 1800),
            ("1小時(shí)后", 3600),
            ("2小時(shí)后", 7200),
            ("3小時(shí)后", 10800),
            ("5分鐘后", 300)
        ]
        
        for text, seconds in preset_times:
            btn = ttk.Button(preset_frame, text=text, 
                           command=lambda s=seconds: self.set_custom_time(s))
            btn.pack(side='left', padx=5)
        
        # 自定義時(shí)間輸入
        custom_frame = ttk.Frame(time_frame)
        custom_frame.pack(pady=10)
        
        ttk.Label(custom_frame, text="自定義時(shí)間:").pack(side='left')
        
        self.hour_var = tk.StringVar(value="0")
        hour_spin = ttk.Spinbox(custom_frame, from_=0, to=23, width=5, 
                               textvariable=self.hour_var)
        hour_spin.pack(side='left', padx=5)
        ttk.Label(custom_frame, text="小時(shí)").pack(side='left')
        
        self.minute_var = tk.StringVar(value="30")
        minute_spin = ttk.Spinbox(custom_frame, from_=0, to=59, width=5,
                                 textvariable=self.minute_var)
        minute_spin.pack(side='left', padx=5)
        ttk.Label(custom_frame, text="分鐘").pack(side='left')
        
        # 命令預(yù)覽區(qū)域
        preview_frame = ttk.LabelFrame(frame, text="命令預(yù)覽", style='Method.TLabelframe')
        preview_frame.pack(fill='x', padx=20, pady=10)
        
        self.command_var = tk.StringVar()
        command_label = ttk.Label(preview_frame, textvariable=self.command_var, 
                                 font=('Consolas', 10))
        command_label.pack(pady=10)
        
        # 按鈕區(qū)域
        button_frame = ttk.Frame(frame)
        button_frame.pack(pady=20)
        
        self.set_btn1 = ttk.Button(button_frame, text="設(shè)置定時(shí)關(guān)機(jī)", 
                                  command=self.set_shutdown_cmd, style='Large.TButton')
        self.set_btn1.pack(side='left', padx=10)
        
        self.cancel_btn1 = ttk.Button(button_frame, text="取消定時(shí)關(guān)機(jī)", 
                                     command=self.cancel_shutdown_cmd, style='Large.TButton')
        self.cancel_btn1.pack(side='left', padx=10)
        
        # 更新命令預(yù)覽
        self.update_command_preview()
        
    def create_method2_tab(self):
        """創(chuàng)建方法二選項(xiàng)卡:快捷方式"""
        frame = ttk.Frame(self.notebook)
        self.notebook.add(frame, text="方法二:創(chuàng)建快捷方式")
        
        # 說明標(biāo)簽
        desc = "為常用關(guān)機(jī)時(shí)間創(chuàng)建桌面快捷方式\n雙擊即可啟動(dòng)定時(shí)關(guān)機(jī)"
        desc_label = ttk.Label(frame, text=desc, font=('微軟雅黑', 10))
        desc_label.pack(pady=10)
        
        # 快捷方式設(shè)置
        shortcut_frame = ttk.LabelFrame(frame, text="快捷方式設(shè)置", style='Method.TLabelframe')
        shortcut_frame.pack(fill='x', padx=20, pady=10)
        
        # 快捷方式名稱
        name_frame = ttk.Frame(shortcut_frame)
        name_frame.pack(pady=10, anchor='w', padx=20)
        
        ttk.Label(name_frame, text="快捷方式名稱:").pack(side='left')
        self.shortcut_name = tk.StringVar(value="定時(shí)關(guān)機(jī)")
        name_entry = ttk.Entry(name_frame, textvariable=self.shortcut_name, width=30)
        name_entry.pack(side='left', padx=10)
        
        # 關(guān)機(jī)時(shí)間設(shè)置
        time_frame = ttk.Frame(shortcut_frame)
        time_frame.pack(pady=10, anchor='w', padx=20)
        
        ttk.Label(time_frame, text="關(guān)機(jī)時(shí)間:").pack(side='left')
        
        self.shortcut_hours = tk.StringVar(value="1")
        hour_spin = ttk.Spinbox(time_frame, from_=0, to=23, width=3,
                               textvariable=self.shortcut_hours)
        hour_spin.pack(side='left', padx=5)
        ttk.Label(time_frame, text="小時(shí)").pack(side='left')
        
        self.shortcut_minutes = tk.StringVar(value="0")
        minute_spin = ttk.Spinbox(time_frame, from_=0, to=59, width=3,
                                 textvariable=self.shortcut_minutes)
        minute_spin.pack(side='left', padx=5)
        ttk.Label(time_frame, text="分鐘").pack(side='left')
        
        # 快捷方式內(nèi)容預(yù)覽
        preview_frame = ttk.LabelFrame(frame, text="快捷方式內(nèi)容", style='Method.TLabelframe')
        preview_frame.pack(fill='x', padx=20, pady=10)
        
        self.shortcut_content = tk.Text(preview_frame, height=4, font=('Consolas', 9))
        self.shortcut_content.pack(pady=10, padx=10, fill='x')
        self.shortcut_content.insert('1.0', "shutdown -s -t 3600")
        self.shortcut_content.config(state='disabled')
        
        # 按鈕區(qū)域
        button_frame = ttk.Frame(frame)
        button_frame.pack(pady=20)
        
        create_btn = ttk.Button(button_frame, text="創(chuàng)建桌面快捷方式", 
                               command=self.create_shortcut, style='Large.TButton')
        create_btn.pack(side='left', padx=10)
        
        test_btn = ttk.Button(button_frame, text="測試此時(shí)間設(shè)置", 
                             command=self.test_shortcut_time, style='Large.TButton')
        test_btn.pack(side='left', padx=10)
        
        # 綁定變量變化事件
        self.shortcut_hours.trace('w', self.update_shortcut_preview)
        self.shortcut_minutes.trace('w', self.update_shortcut_preview)
        
    def create_method3_tab(self):
        """創(chuàng)建方法三選項(xiàng)卡:任務(wù)計(jì)劃(簡化版)"""
        frame = ttk.Frame(self.notebook)
        self.notebook.add(frame, text="方法三:定時(shí)任務(wù)")
        
        # 說明標(biāo)簽
        desc = "設(shè)置每天固定時(shí)間自動(dòng)關(guān)機(jī)\n適合規(guī)律性定時(shí)關(guān)機(jī)需求"
        desc_label = ttk.Label(frame, text=desc, font=('微軟雅黑', 10))
        desc_label.pack(pady=10)
        
        # 時(shí)間設(shè)置
        schedule_frame = ttk.LabelFrame(frame, text="定時(shí)設(shè)置", style='Method.TLabelframe')
        schedule_frame.pack(fill='x', padx=20, pady=10)
        
        # 時(shí)間選擇
        time_frame = ttk.Frame(schedule_frame)
        time_frame.pack(pady=15, anchor='center')
        
        ttk.Label(time_frame, text="每天關(guān)機(jī)時(shí)間:", font=('微軟雅黑', 10)).pack(side='left')
        
        self.schedule_hour = tk.StringVar(value="22")
        hour_spin = ttk.Spinbox(time_frame, from_=0, to=23, width=3,
                               textvariable=self.schedule_hour)
        hour_spin.pack(side='left', padx=5)
        ttk.Label(time_frame, text=":").pack(side='left')
        
        self.schedule_minute = tk.StringVar(value="00")
        minute_spin = ttk.Spinbox(time_frame, from_=0, to=59, width=3,
                                 textvariable=self.schedule_minute)
        minute_spin.pack(side='left', padx=5)
        
        # 任務(wù)狀態(tài)顯示
        self.task_status_var = tk.StringVar(value="當(dāng)前無定時(shí)任務(wù)")
        status_label = ttk.Label(schedule_frame, textvariable=self.task_status_var,
                                font=('微軟雅黑', 9))
        status_label.pack(pady=10)
        
        # 計(jì)算下次關(guān)機(jī)時(shí)間
        self.next_time_var = tk.StringVar()
        next_time_label = ttk.Label(schedule_frame, textvariable=self.next_time_var,
                                   font=('微軟雅黑', 9))
        next_time_label.pack(pady=5)
        
        # 模擬任務(wù)區(qū)域
        sim_frame = ttk.LabelFrame(frame, text="模擬任務(wù)管理", style='Method.TLabelframe')
        sim_frame.pack(fill='x', padx=20, pady=10)
        
        sim_desc = """注意:這是簡化版模擬定時(shí)任務(wù)。
真實(shí)的Windows任務(wù)計(jì)劃需要管理員權(quán)限和復(fù)雜配置。
本程序使用Python線程模擬定時(shí)功能。"""
        sim_label = ttk.Label(sim_frame, text=sim_desc, font=('微軟雅黑', 9))
        sim_label.pack(pady=10, padx=10)
        
        # 按鈕區(qū)域
        button_frame = ttk.Frame(frame)
        button_frame.pack(pady=20)
        
        self.schedule_btn = ttk.Button(button_frame, text="啟動(dòng)定時(shí)任務(wù)", 
                                      command=self.toggle_schedule, style='Large.TButton')
        self.schedule_btn.pack(side='left', padx=10)
        
        ttk.Button(button_frame, text="立即測試關(guān)機(jī)", 
                  command=self.test_schedule_shutdown, style='Large.TButton').pack(side='left', padx=10)
        
    def create_status_bar(self):
        """創(chuàng)建狀態(tài)欄"""
        status_frame = ttk.Frame(self.root)
        status_frame.pack(fill='x', side='bottom', pady=5)
        
        self.status_var = tk.StringVar(value="就緒")
        status_label = ttk.Label(status_frame, textvariable=self.status_var, 
                                relief='sunken', anchor='w')
        status_label.pack(fill='x', padx=10, pady=2)
        
    def set_custom_time(self, seconds):
        """設(shè)置自定義時(shí)間到輸入框"""
        hours = seconds // 3600
        minutes = (seconds % 3600) // 60
        
        self.hour_var.set(str(hours))
        self.minute_var.set(str(minutes))
        self.update_command_preview()
        
    def update_command_preview(self, *args):
        """更新命令預(yù)覽"""
        try:
            hours = int(self.hour_var.get() or 0)
            minutes = int(self.minute_var.get() or 0)
            seconds = hours * 3600 + minutes * 60
            
            if seconds > 0:
                self.command_var.set(f"shutdown -s -t {seconds}")
            else:
                self.command_var.set("請?jiān)O(shè)置有效的關(guān)機(jī)時(shí)間")
        except ValueError:
            self.command_var.set("請輸入有效數(shù)字")
            
    def update_shortcut_preview(self, *args):
        """更新快捷方式內(nèi)容預(yù)覽"""
        try:
            hours = int(self.shortcut_hours.get() or 0)
            minutes = int(self.shortcut_minutes.get() or 0)
            seconds = hours * 3600 + minutes * 60
            
            if seconds > 0:
                content = f"shutdown -s -t {seconds}"
                self.shortcut_content.config(state='normal')
                self.shortcut_content.delete('1.0', 'end')
                self.shortcut_content.insert('1.0', content)
                self.shortcut_content.config(state='disabled')
        except ValueError:
            pass
            
    def set_shutdown_cmd(self):
        """執(zhí)行方法一:設(shè)置關(guān)機(jī)命令"""
        try:
            hours = int(self.hour_var.get() or 0)
            minutes = int(self.minute_var.get() or 0)
            seconds = hours * 3600 + minutes * 60
            
            if seconds <= 0:
                messagebox.showwarning("警告", "請?jiān)O(shè)置有效的關(guān)機(jī)時(shí)間")
                return
                
            # 執(zhí)行關(guān)機(jī)命令
            subprocess.run(f"shutdown -s -t {seconds}", shell=True)
            
            # 計(jì)算關(guān)機(jī)時(shí)間
            shutdown_time = datetime.now() + timedelta(seconds=seconds)
            
            messagebox.showinfo("成功", 
                f"定時(shí)關(guān)機(jī)已設(shè)置!\n"
                f"系統(tǒng)將在 {hours}小時(shí){minutes}分鐘后關(guān)閉\n"
                f"預(yù)計(jì)關(guān)機(jī)時(shí)間:{shutdown_time.strftime('%Y-%m-%d %H:%M:%S')}\n\n"
                f"如需取消,請使用取消按鈕或運(yùn)行命令:shutdown -a")
            
            self.status_var.set(f"已設(shè)置 {hours}小時(shí){minutes}分鐘后關(guān)機(jī)")
            
        except ValueError:
            messagebox.showerror("錯(cuò)誤", "請輸入有效的數(shù)字")
        except Exception as e:
            messagebox.showerror("錯(cuò)誤", f"設(shè)置失敗:{str(e)}")
            
    def cancel_shutdown_cmd(self):
        """取消定時(shí)關(guān)機(jī)"""
        try:
            subprocess.run("shutdown -a", shell=True)
            messagebox.showinfo("成功", "定時(shí)關(guān)機(jī)已取消")
            self.status_var.set("定時(shí)關(guān)機(jī)已取消")
        except Exception as e:
            messagebox.showerror("錯(cuò)誤", f"取消失?。簕str(e)}")
            
    def create_shortcut(self):
        """創(chuàng)建桌面快捷方式"""
        try:
            # 獲取桌面路徑
            desktop_path = os.path.join(os.path.expanduser('~'), 'Desktop')
            
            # 計(jì)算秒數(shù)
            hours = int(self.shortcut_hours.get() or 0)
            minutes = int(self.shortcut_minutes.get() or 0)
            seconds = hours * 3600 + minutes * 60
            
            if seconds <= 0:
                messagebox.showwarning("警告", "請?jiān)O(shè)置有效的關(guān)機(jī)時(shí)間")
                return
                
            # 創(chuàng)建批處理文件
            bat_content = f"""@echo off
echo 正在設(shè)置定時(shí)關(guān)機(jī)...
echo 系統(tǒng)將在 {hours}小時(shí){minutes}分鐘后關(guān)閉
shutdown -s -t {seconds}
pause
"""
            
            # 創(chuàng)建快捷方式內(nèi)容(VBS腳本)
            shortcut_name = self.shortcut_name.get() or "定時(shí)關(guān)機(jī)"
            bat_filename = f"{shortcut_name}.bat"
            bat_path = os.path.join(desktop_path, bat_filename)
            
            vbs_content = f"""Set WshShell = CreateObject("WScript.Shell")
Set oShellLink = WshShell.CreateShortcut("{desktop_path}\\{shortcut_name}.lnk")
oShellLink.TargetPath = "{bat_path}"
oShellLink.WindowStyle = 1
oShellLink.Description = "定時(shí)關(guān)機(jī)快捷方式"
oShellLink.Save
"""
            
            # 保存批處理文件
            with open(bat_path, 'w', encoding='gbk') as f:
                f.write(bat_content)
                
            # 保存VBS腳本并創(chuàng)建快捷方式
            vbs_path = os.path.join(desktop_path, "create_shortcut.vbs")
            with open(vbs_path, 'w', encoding='gbk') as f:
                f.write(vbs_content)
                
            subprocess.run(f'cscript //nologo "{vbs_path}"', shell=True)
            
            # 清理臨時(shí)文件
            os.remove(vbs_path)
            
            messagebox.showinfo("成功", 
                f"快捷方式已創(chuàng)建到桌面!\n"
                f"文件名:{shortcut_name}.lnk\n"
                f"雙擊即可設(shè)置 {hours}小時(shí){minutes}分鐘后關(guān)機(jī)")
            
            self.status_var.set(f"快捷方式已創(chuàng)建:{shortcut_name}")
            
        except Exception as e:
            messagebox.showerror("錯(cuò)誤", f"創(chuàng)建失?。簕str(e)}")
            
    def test_shortcut_time(self):
        """測試快捷方式設(shè)置的關(guān)機(jī)時(shí)間"""
        try:
            hours = int(self.shortcut_hours.get() or 0)
            minutes = int(self.shortcut_minutes.get() or 0)
            seconds = hours * 3600 + minutes * 60
            
            if seconds <= 0:
                messagebox.showwarning("警告", "請?jiān)O(shè)置有效的關(guān)機(jī)時(shí)間")
                return
                
            subprocess.run(f"shutdown -s -t {seconds}", shell=True)
            
            messagebox.showinfo("測試成功", 
                f"已設(shè)置測試關(guān)機(jī)!\n"
                f"系統(tǒng)將在 {hours}小時(shí){minutes}分鐘后關(guān)閉\n"
                f"如需取消請使用'取消定時(shí)關(guān)機(jī)'按鈕")
            
        except Exception as e:
            messagebox.showerror("錯(cuò)誤", f"測試失?。簕str(e)}")
            
    def toggle_schedule(self):
        """啟動(dòng)/停止定時(shí)任務(wù)"""
        if not self.is_scheduled:
            try:
                hour = int(self.schedule_hour.get() or 22)
                minute = int(self.schedule_minute.get() or 0)
                
                if hour < 0 or hour > 23 or minute < 0 or minute > 59:
                    messagebox.showwarning("警告", "請輸入有效的時(shí)間")
                    return
                    
                # 啟動(dòng)定時(shí)任務(wù)線程
                self.shutdown_thread = threading.Thread(
                    target=self.schedule_shutdown_task,
                    args=(hour, minute),
                    daemon=True
                )
                self.shutdown_thread.start()
                
                self.is_scheduled = True
                self.schedule_btn.config(text="停止定時(shí)任務(wù)")
                
                # 更新狀態(tài)顯示
                now = datetime.now()
                target_time = datetime(now.year, now.month, now.day, hour, minute)
                if target_time < now:
                    target_time += timedelta(days=1)
                    
                self.task_status_var.set(f"定時(shí)任務(wù)已啟動(dòng)")
                self.next_time_var.set(f"下次關(guān)機(jī)時(shí)間:{target_time.strftime('%Y-%m-%d %H:%M')}")
                
                messagebox.showinfo("成功", 
                    f"定時(shí)任務(wù)已啟動(dòng)!\n"
                    f"每天 {hour:02d}:{minute:02d} 自動(dòng)關(guān)機(jī)\n"
                    f"注意:這是程序模擬的定時(shí)任務(wù),關(guān)閉本程序?qū)⑼V?)
                
                self.status_var.set(f"定時(shí)任務(wù)已啟動(dòng):每天 {hour:02d}:{minute:02d}")
                
            except ValueError:
                messagebox.showerror("錯(cuò)誤", "請輸入有效數(shù)字")
        else:
            # 停止定時(shí)任務(wù)
            self.is_scheduled = False
            self.schedule_btn.config(text="啟動(dòng)定時(shí)任務(wù)")
            self.task_status_var.set("定時(shí)任務(wù)已停止")
            self.next_time_var.set("")
            self.status_var.set("定時(shí)任務(wù)已停止")
            
    def schedule_shutdown_task(self, target_hour, target_minute):
        """定時(shí)任務(wù)線程函數(shù)"""
        while self.is_scheduled:
            try:
                now = datetime.now()
                
                # 計(jì)算今天的目標(biāo)時(shí)間
                target_time = datetime(now.year, now.month, now.day, target_hour, target_minute)
                
                # 如果今天的時(shí)間已過,設(shè)置為明天
                if target_time < now:
                    target_time += timedelta(days=1)
                
                # 計(jì)算等待時(shí)間(秒)
                wait_seconds = (target_time - now).total_seconds()
                
                # 每隔10秒檢查一次,以便及時(shí)響應(yīng)停止命令
                for _ in range(int(wait_seconds / 10)):
                    if not self.is_scheduled:
                        return
                    time.sleep(10)
                
                # 等待剩余時(shí)間
                remaining = wait_seconds % 10
                if remaining > 0 and self.is_scheduled:
                    time.sleep(remaining)
                
                # 執(zhí)行關(guān)機(jī)
                if self.is_scheduled:
                    subprocess.run("shutdown -s -t 60", shell=True)
                    
                    # 更新狀態(tài)
                    self.root.after(0, lambda: self.task_status_var.set(
                        f"已執(zhí)行關(guān)機(jī)命令!下次將在明天 {target_hour:02d}:{target_minute:02d}"))
                    
                    # 重置為明天
                    time.sleep(65)  # 等待關(guān)機(jī)執(zhí)行時(shí)間
                    
            except Exception as e:
                print(f"定時(shí)任務(wù)錯(cuò)誤:{e}")
                break
                
    def test_schedule_shutdown(self):
        """測試定時(shí)關(guān)機(jī)(立即關(guān)機(jī),但給予取消時(shí)間)"""
        response = messagebox.askyesno("確認(rèn)測試", 
            "將設(shè)置60秒后關(guān)機(jī)進(jìn)行測試\n請確保已保存所有工作\n\n是否繼續(xù)?")
        
        if response:
            subprocess.run("shutdown -s -t 60", shell=True)
            messagebox.showinfo("測試開始", 
                "已設(shè)置60秒后關(guān)機(jī)\n"
                "如需取消請使用'取消定時(shí)關(guān)機(jī)'按鈕")
            self.status_var.set("測試關(guān)機(jī)已設(shè)置:60秒后關(guān)閉")

def main():
    root = tk.Tk()
    app = ShutdownTimerApp(root)
    root.mainloop()

if __name__ == "__main__":
    main()

功能說明

方法一:命令行設(shè)置

  • 提供預(yù)設(shè)時(shí)間按鈕(5分鐘、30分鐘、1小時(shí)等)
  • 支持自定義小時(shí)和分鐘設(shè)置
  • 實(shí)時(shí)顯示將要執(zhí)行的命令
  • 設(shè)置和取消按鈕

方法二:創(chuàng)建快捷方式

  • 自定義快捷方式名稱
  • 設(shè)置關(guān)機(jī)時(shí)間
  • 預(yù)覽快捷方式內(nèi)容
  • 創(chuàng)建桌面快捷方式
  • 測試快捷方式功能

方法三:定時(shí)任務(wù)(簡化版)

  • 設(shè)置每天固定時(shí)間自動(dòng)關(guān)機(jī)
  • 模擬Windows任務(wù)計(jì)劃功能
  • 顯示下次關(guān)機(jī)時(shí)間
  • 啟動(dòng)/停止定時(shí)任務(wù)
  • 測試功能

使用說明

運(yùn)行程序

python shutdown_timer.py

注意事項(xiàng)

  • 程序需要Windows系統(tǒng)支持
  • 方法三為Python模擬實(shí)現(xiàn),關(guān)閉程序會(huì)停止定時(shí)任務(wù)
  • 真實(shí)的Windows任務(wù)計(jì)劃需要管理員權(quán)限和更復(fù)雜的配置

安全提醒

  • 定時(shí)關(guān)機(jī)前請保存好所有工作
  • 測試時(shí)建議設(shè)置較短時(shí)間(如5分鐘)
  • 記住可以使用shutdown -a命令或程序的取消功能

重要提醒

  • 保存工作:在設(shè)置自動(dòng)關(guān)機(jī)前,請務(wù)必保存好所有打開的文件和工作進(jìn)度,防止數(shù)據(jù)丟失。
  • 取消命令:記住取消命令 shutdown -a,或者去任務(wù)計(jì)劃程序里禁用任務(wù),以備不時(shí)之需。

總結(jié)建議

  • 臨時(shí)用一次:用 方法一 運(yùn)行命令。
  • 經(jīng)常固定時(shí)間用:用 方法二 創(chuàng)建快捷方式。
  • 長期規(guī)律性定時(shí):用 方法三 任務(wù)計(jì)劃程序。
  • 怕麻煩,喜歡點(diǎn)鼠標(biāo):用 方法四 第三方軟件。

選擇最適合你的方法即可!

到此這篇關(guān)于Python設(shè)置電腦定時(shí)關(guān)機(jī)的方法詳解(附完整代碼)的文章就介紹到這了,更多相關(guān)Python電腦定時(shí)關(guān)機(jī)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python編程之event對象的用法實(shí)例分析

    Python編程之event對象的用法實(shí)例分析

    這篇文章主要介紹了Python編程之event對象的用法,結(jié)合實(shí)例形式分析了event對象在線程通信中的作用與使用方法,需要的朋友可以參考下
    2017-03-03
  • Python和Anaconda的版本對應(yīng)關(guān)系

    Python和Anaconda的版本對應(yīng)關(guān)系

    這篇文章主要為大家介紹了Python和Anaconda,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • python 19個(gè)值得學(xué)習(xí)的編程技巧

    python 19個(gè)值得學(xué)習(xí)的編程技巧

    這篇文章主要介紹了python 19個(gè)值得學(xué)習(xí)的編程技巧,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-08-08
  • Django認(rèn)證系統(tǒng)user對象實(shí)現(xiàn)過程解析

    Django認(rèn)證系統(tǒng)user對象實(shí)現(xiàn)過程解析

    這篇文章主要介紹了Django認(rèn)證系統(tǒng)user對象實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Python函數(shù)實(shí)現(xiàn)學(xué)員管理系統(tǒng)

    Python函數(shù)實(shí)現(xiàn)學(xué)員管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Python函數(shù)實(shí)現(xiàn)學(xué)員管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Python語音合成之第三方庫gTTs/pyttsx3/speech橫評(內(nèi)附使用方法)

    Python語音合成之第三方庫gTTs/pyttsx3/speech橫評(內(nèi)附使用方法)

    Python是一種非常強(qiáng)大的腳本語言,可以用來實(shí)現(xiàn)各種復(fù)雜的應(yīng)用,其中之一就是文本轉(zhuǎn)語音,即把文字轉(zhuǎn)換成聲音來發(fā)出,下面這篇文章主要給大家介紹了關(guān)于Python語音合成之第三方庫gTTs/pyttsx3/speech橫評的相關(guān)資料,文中還介紹了詳細(xì)的使用方法,需要的朋友可以參考下
    2023-05-05
  • 基于Python實(shí)現(xiàn)主機(jī)遠(yuǎn)程控制

    基于Python實(shí)現(xiàn)主機(jī)遠(yuǎn)程控制

    這篇文章主要介紹了基于Python實(shí)現(xiàn)主機(jī)遠(yuǎn)程控制,本文為?HITwh?網(wǎng)絡(luò)空間安全專業(yè)網(wǎng)絡(luò)空間安全設(shè)計(jì)與實(shí)踐選題,主要實(shí)現(xiàn)了遠(yuǎn)程監(jiān)控局域網(wǎng)內(nèi)的主機(jī)桌面與網(wǎng)絡(luò)情況、簡單鍵鼠控制、遠(yuǎn)程斷網(wǎng)(ARP?攻擊)、數(shù)據(jù)加密傳輸?shù)裙δ?,下面來看看具體實(shí)現(xiàn)過程吧
    2022-01-01
  • Python構(gòu)建高性能GitHub倉庫批量下載工具的技術(shù)實(shí)踐指南

    Python構(gòu)建高性能GitHub倉庫批量下載工具的技術(shù)實(shí)踐指南

    本文介紹了使用Python開發(fā)的PyScript-GitHubRepo工具,旨在解決批量下載GitHub倉庫的問題,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考下
    2026-05-05
  • Python面向?qū)ο蟮娜筇匦苑庋b、繼承、多態(tài)

    Python面向?qū)ο蟮娜筇匦苑庋b、繼承、多態(tài)

    這篇文章介紹了Python面向?qū)ο蟮娜筇匦苑庋b、繼承、多態(tài),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • python 實(shí)現(xiàn)IP子網(wǎng)計(jì)算

    python 實(shí)現(xiàn)IP子網(wǎng)計(jì)算

    這篇文章主要介紹了python 實(shí)現(xiàn)IP子網(wǎng)計(jì)算的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-02-02

最新評論

政和县| 绍兴县| 镶黄旗| 安龙县| 内乡县| 济宁市| 酉阳| 东乌珠穆沁旗| 犍为县| 泸西县| 深圳市| 九龙坡区| 延庆县| 景洪市| 巧家县| 新河县| 微博| 游戏| 乐陵市| 运城市| 会昌县| 虞城县| 江源县| 五台县| 黄大仙区| 衡南县| 常州市| 玉树县| 松潘县| 淮阳县| 七台河市| 军事| 来安县| 区。| 五常市| 榆树市| 沈丘县| 武清区| 新沂市| 寿光市| 上蔡县|