C#學習筆記 電腦定時關機程式 準備篇
定時關掉電腦的程式是一開始學C#時, 最想寫的了. 其原因是常常人已經在睡覺或忙著其它的事時, 但電腦因轉檔或下載檔案耗時, 一直開著, 結束後卻因人不在電腦前, 不能關機, 感覺相當浪費電.
準備篇是落葉在寫電腦定時關機程式之前找資料的筆記, 其中也包含一些C#測試的小程式, 例如像Timer.
這次找資料的過程中, 也發現了Windows原來也可以直接執行定時關機, 詳情請看內文.
説明極可能亂七八糟. . . 一個非寫程式出身的孩子留. . .
想像程式
手邊沒現成的程式可以參考, 投入時間找資料前, 我必須先想像我想要的電腦定時關機程式是大概什麼樣子, 有些什麼功能鍵.
首先應該是有2個顯示”現在時間”和”關機時間”的Label, 再來是給使用者輸入關機”時””分””秒”的TextBox, 最後是3個分別為”執行”, “中止”和”離開程式”的Button.
這樣就夠了吧. . .
在關機時間的設定上, 目前想到的做法有兩種. 一是使用者輸入在系統時間幾時幾分關機, 另一種就是使用者輸入幾時幾分後關機. 落葉比較傾向後者,因為轉檔和下載程式顯示的時間多是在多久後會完成. 直接輸入幾時幾分後關機, 好像比較具直覺性.
需要更多資料的清單
想像程式的階段過了後, 我list了以下項目, 都是我還沒機會碰過的, 需要更多的資料.
1. 如何在Label顯示現在時間和關機時間.
2. 如何設定Timer.
3. 如何執行某路徑的程式.
4. 如何關機.
再來就開始翻工具書和Google囉! 順便一提落葉手上唯一的一本工具書是當初要自學C#時購買的, 由博碩文化出品的Visual C# 2008從零開始.
程式碼
1. Label顯示現在時間和關機時間.
現在日期寫法:
DateTime.Now.ToLongDateString();
現在時間寫法:
DateTime.Now.ToLongTimeString();
現在日期加天數寫法(本例為加5天):
System.DateTime Today = System.DateTime.Now;
System.DateTime Add5Day = Today.AddDays(5)
現在時間加小時寫法(本例為加12個小時):
System.DateTime Today = System.DateTime.Now;
System.DateTime Add12Hours = Today.AddHours(12);
原本以為天數和時間的加減會很麻煩, 可能要轉到int計算後再轉回string, 原來C#提供的方法就有. 那這樣的話我還需要用Timer來計算關機的時間嗎? 不知道DateTime有沒有方法直接設定執行某件事的時間? 疑惑?
寫了一個小程式讓Label顯示現在的時間和加個天數和小時後的時間.
2. 如何設定Timer.
選擇: 檢視 > 設計工具 > 元件 > Timer (接著將Timer拉進.cs[設計]的Form即可)
利用了上例的程式, 將Timer放在Form_Load如下. . .
timer1.Enabled = true;
timer1.Interval = 1000;
再將原來的顯示時間的Label丟到Timer_Tick
label1.Text = DateTime.Now.ToLongDateString();
label2.Text = DateTime.Now.ToLongTimeString();
如此一來每1000毫秒(1秒), 會執行label1和label2, 程式中的現在日期和時間就會每1秒都更新. 換句話說如果Interval = 10000的話, 則label1和label2就會每10秒更新一次. 除非Timer.Enabled = false, 不然Timer就會一直執行.
3. 如何執行某路徑的程式.
指定執行某程式的寫法(本例為執行該路徑中shutdown.exe程式):
string FileLink = @"C:\WINDOWS\system32\shutdown.exe";
Process ShutDown = new Process();
ShutDown.StartInfo.FileName= FileLink;
ShutDown.Start();
4. 如何關機.
原來以為直接執行了WINDOWS\system32\shutdown.exe後, 電腦就會直接關掉了, 但我在直接執行這個檔案, 卻苦等不到電腦關機. 後來發現要設定一些參數.
關機 (在上例程式碼中加入第4行的內容, 0為設定關機的秒數)
string FileLink = @"C:\WINDOWS\system32\shutdown.exe";
Process ShutDown = new Process();
ShutDown.StartInfo.FileName= FileLink;
ShutDown.StartInfo.Arguments = "-s -t 0";
ShutDown.Start();
重新開機
ShutDown.StartInfo.Arguments = "-r -t 0";
這也能在Windows下直接”執行”, 只要如下鍵入shutdown –s –t, 並輸入想要關機的秒數. 唯一比較麻煩的一件事, 時間是要自己計算好(本例為120秒後關機)