2009年6月7日 星期日

用 VBScript 自製鬧鈴程式

S0000406.png

前言

有需求才會有發明,用流行音樂來當鬧鈴的人越來越多,其中手機當鬧鐘當然就是首選,只是要是個不注意沒記得充電的話,明天就不用起床了,那可就很慘了。現在人如果不是特別注意電費的用量(學校宿舍~XD),幾乎成天都是開著電腦,那何不用電腦來當鬧鐘哩?此外,電腦發出的音量也絕對夠大聲(除非你沒開喇叭),個人也有這個構想,於是下了很多程式來用,只是效果都不是很好,其中有不能照時運作的,也有的是只播一次,就不再撥放了,那要貪睡蟲起來是不可能了~更糟的還有完全沒反應的...這種的就不用管他了。當然其實有一部份的原因是沒有自己要的功能,像是隨機撥放歌曲,要是每次播得都是一樣的歌,這樣不會厭倦嗎?此外還有另一個瓶緊,就是外文語系,撰寫 ANSI 程式通常是最直接最快的,但只要是碰到不屬中文其他語系的話,那也就不用播了(除了裝有 Unicode 補丁,不過換作業系統後又會遇到,很麻煩的)~
本篇使用 VBScript,因為它是 Windows 中的基本配備,功能也相較另一個附帶命令批次字元強大,沒有文字敘述上的缺陷,而且能支援 Unicode,相較其他進階的程式語言,不需加裝任何東西的直譯式語言也比較容易修改和攜帶,就如同 Linux Shell 一般。在此寫下方法做紀錄~

工作材料

當然要動手做也要有材料,那麼就先來說一下需要的材料。

1. KMPlayer (用來播放音樂的程式,可用其他支援 Unicode 的播放軟體,
  由於是用 VBScript 撰寫,自然不可能會有播放音樂的能力,如果有算我孤陋寡聞)
2. 隨便一個你認為好用的文字編輯程式,notepad 也行。
3. 系統排程 (這是用來定時啟動程式的關鍵)
4. Windows XP 以上 (這是個人測試可以執行的作業系統,
  在這個版本之前可能要安裝,VBScript 的直譯器)
撰寫程式

撰寫上沒什麼要點,只是為了配合 Windows 的系統排程,需要注意一些事情,由於 Windows 在程式執行後,再到程式重複直行的時間時,如果發現程式還在執行,便不會再次啟動程式,如果這途中有人暫停了播放器,那就不會再執行,這樣也就失去了當鬧鈴的必要條件,於是除了播放程式自身必須要有自動關閉,更要運用到 VBScript 的強制結束程式功能。如果你用的不是 KMPlayer 那請先用開始執行,輸入程式路徑,在後面加上 /? 確定有沒有在播放完畢時關閉程式的功能。

Option Explicit

Private FSO
Private WshShell
Private ProgPath
Private WshExec
Private FileStrem
Private MusicList
Private MusicListNum
Private i

Set FSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")
Set FileStrem = FSO.OpenTextFile(FSO.BuildPath(FSO.GetFolder("."), "MusicList.txt"), 1, False, -1)
'此處為要隨機播放的音樂檔案路徑列表檔案名稱
MusicList = Split(FileStrem.ReadAll, vbCrLf)
MusicListNum = UBound(MusicList) + 1
Randomize
i = Int(Rnd() * MusicListNum)
Set WshExec = WshShell.Exec("""請填入 KMPlayer 主程式的所在位置,另外記得要在有 \ 的部分多加一條 \。"" /close """ & MusicList(i) & """")
For i = 1 To 285
'檢查程式狀況,在 285 秒後未自行結束,將會強行結束。
If WshExec.Status = 1 Then Exit For
WScript.Sleep 1000
Next
If WshExec.Status = 0 Then WshExec.Terminate
Set WshShell = Nothing
Set WshExec = Nothing
將上面文字輸入到編輯器後存檔,存檔時要注意,是存成 .vbs 不要誤存成 .txt,不然是沒有作用的。

製作隨機音樂列表

這部分沒什麼難度,只要將音樂的完整路徑填到裡面就行,什麼語言都行,記得一首歌要換一行就好,存檔時,將編碼換成 Unicode,這是最重要的部分,檔案名稱為 MusicList.txt,與 .vbs 放在一起。你也可以更換上面的檔名,不過存成的檔案要跟著換才不會錯,但絕對不能更改成其他編碼,不然就......

系統排程設定

這個部分就最麻煩的了。個人無法代勞,請詳細看清楚再做操作。由於在系統排程上,XP 和 Vista、7 有很大的不同,所以會分開來說明。
Windows XP
開始→所有程式→附屬應用程式→系統工具→排定的工作

  1. 點擊新增排定的工作來新增新的項目。
    S0000502.jpg
  2. XP 的排程精靈說實在是個多餘的設計,到頭來還要打開內容才能做詳細設定,所以這邊就快速做一下設定就好。
    S0000503.jpg
  3. 在這個步驟中選擇要執行的程式,直接按瀏覽尋找,在此步驟後的,直接按下一步快速通過。(你也可以先設時間,不過到內容裡面也能設定,所以不急。)
    S0000504.jpg
  4. 在按下完成後,會出現這個視窗,這是因為先前沒有設定密碼,不過也用不著設定,等會會在內容中做設定,所以不用管它。
    S0000505.jpg
  5. 如果完成的步驟中有勾選開啟進階內容的話,那這個頁面會直接出現,沒有也沒關係,在項目上連擊左鍵兩下就能開啟。首先選取登入後才執行,這樣先前的問題就能迴避掉。
    S0000506.jpg
  6.

切到排程,這裡可以設定時間,不過現在的重點不是這個,按進階,出現的視窗依照圖中的差異做勾選,到這裡就完成了~

    S0000507.jpg
    S0000508.png
Windows Vista & 7

開始→所有程式→附屬應用程式→系統工具→工作排程器

  1. 選擇左側欄中的工作排程器程式庫,接著選右側欄中的建立工作。
    S0000509.jpg
  2. 名稱隨便取,這頁不用做什麼設定,所以切到觸發程序。
    S0000510.jpg
  3. 按新增,這裡可以設定時間,請依照自己的需求設定。主要是進階設定,請依照下圖做設定,然後確定,切到動作頁。
    S0000511.jpg
    S0000512.jpg
  4. 按新增,把要執行的指令碼填進去就完成了,接著就可以收工啦~
    S0000513.jpg
    S0000514.jpg
注意事項

在此要說明幾項注意事項,其一是中斷時間,程式的預設是在 285 秒(4分45秒)未結束會強行將播放器結束,所以當音樂長度超過這個數字都會被結束掉,其二是重覆時間,可以更改時間,但原則上必須比中斷時間大 15 秒以上(測試時還能夠趕上下一次播放),基本上 30 秒以上為佳,否則程式會來不及在下一次重複前結束,其三是程式沒有完整的停止功能,所以你如果確定已經醒了那只能把喇叭關小聲,直到排程結束~XD
另外關於沒有自動關閉功能的播放器,其實還是可用的,這一方面不會有什麼影響,不過要注意一下重複時間和中斷時間有沒有大過一定值以上,不然很可能會變成雙倍的重覆時間才播一次。

後言

唔~花了一個下午的時間完成這一篇,似乎是電腦前待太久,變得好不舒服啊~找時間再繼續修改吧~現在好難過啊~另外,有要轉貼的也歡迎,不過請標上 Blog 網址就是了~XD

沒有留言: