python實現電腦自動關機


初學python,想做一個自動關電腦的程序,到了晚上11點讓電腦自動關機,寫了一個簡單的python代碼。雖然只是一個簡單的功能,但是經歷了好幾次優化的過程

第一個過程:最簡單的實現定時關機的功能

from datetime import *
import os

tmNow = datetime.now()
d = date.today()
t = time(23,10,0)
shtdownTime = datetime.combine(d,t)

def ShutDown():
    while True:
        tmNow = datetime.now()
        timedDelta = (shtdownTime - tmNow).total_seconds()
        if timedDelta < 60:
            os.system('shutdown -s -f -t 59')
            break
        else:
            continue
            
if __name__ == '__main__':
    ShutDown()

上面這個代碼已經實現了基本的自動關機功能。使用一個while循環實時監測當前時間距離關機時間還有多少秒,當距離關機時間<1分鍾的時候,執行關機的腳本os.system('shutdown -s -f -t 59')

第二個過程:給機主一個彈框提示

但是這樣不夠人性化,機主也許在工作有需要保存的工作沒有保存,這樣突然關機導致機主的代碼或者游戲進度丟失,所以我想在關機之前給機主一個彈框提示“我要關機了,趕快保存一下!”,這就需要使用win32api庫,調用Windows的鈎子函數彈出messageBox。改進之后的代碼如下:

 

 1 from datetime import *
 2 import os
 3 
 4 tmNow = datetime.now()
 5 d = date.today()
 6 t = time(23,10,0)
 7 shtdownTime = datetime.combine(d,t)
 8 
 9 def ShutDown():
10     while True:
11         tmNow = datetime.now()
12         timedDelta = (shtdownTime - tmNow).total_seconds()
13         if timedDelta < 60:
14             win32api.MessageBox(win32con.NULL, u'還有59s關機,趕快保存一下!', u'溫馨提醒', win32con.MB_OK)
15             os.system('shutdown -s -f -t 59')           
16             break
17         else:
18             continue
19             
20 if __name__ == '__main__':
21     ShutDown()

相比第一段代碼只是新增了第15行 win32api.MessageBox(win32con.NULL, u'還有59s關機,趕快保存一下!', u'溫馨提醒', win32con.MB_OK),距離開機時間<1分鍾的時候,給出一個彈框提示。點擊確定按鈕開始執行關機腳本。

但是這樣又出現了一個問題,如果機主不點擊“溫馨提醒”對話框的確定按鈕,程序就永遠也不會執行關機腳本,這樣機主哪怕玩到夜里一兩點也不會自動關機了。所以就有了第三個過程的改進。

第三個過程:雙線程實現,一個線程用來彈出提醒框,另一個線程用來執行關機腳本,也就是我的最終代碼。代碼如下。

 1 #coding=utf-8
 2 "shutdown at 23:00"
 3 
 4 from datetime import *
 5 import os
 6 import win32api
 7 import win32con
 8 from threading import *
 9 
10 tmNow = datetime.now()
11 d = date.today()
12 t = time(23,10,0)
13 shtdownTime = datetime.combine(d,t)
14 
15 def ShowHint():    
16     while True:
17         tmNow = datetime.now()
18         timedDelta = (shtdownTime - tmNow).total_seconds()
19         if timedDelta < 60:
20             win32api.MessageBox(win32con.NULL, u'還有59s關機,趕快保存一下!', u'溫馨提醒', win32con.MB_OK)
21             break
22         else:
23             continue
24 def ShutDown():
25     while True:
26         tmNow = datetime.now()
27         timedDelta = (shtdownTime - tmNow).total_seconds()
28         if timedDelta < 60:
29             os.system('shutdown -s -f -t 59')
30             break
31         else:
32             continue
33             
34 if __name__ == '__main__':
35     threadShowHint = threading.Thread(target=ShowHint)
36     threadShutDown = threading.Thread(target=ShutDown)
37     
38     threadShowHint.start()
39     threadShutDown.start()
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM