如果電腦睡得好好的,卻在幾分鐘或幾小時後自己醒來、旁邊根本沒人,多半是喚醒計時器在叫它。它是被明確授權、可以在指定時間把 Windows 從睡眠中叫醒的排程工作。這篇教你列出目前有哪些正在等、查上次是誰叫醒它,以及停用或限制喚醒計時器,讓電腦真的睡得住。
快速答案:用系統管理員身分開啟命令提示字元或 PowerShell,跑 powercfg /waketimers,看目前排定要叫醒電腦的是什麼。想允許或擋下喚醒計時器,Windows 10 和 11 都一樣:到「控制台 → 電源選項 → 變更計劃設定 → 變更進階電源設定 → 睡眠 → 允許喚醒計時器」,設成停用或僅重要喚醒計時器(啟用就是全部放行)。
允許喚醒計時器有三個選項(筆電的插電和使用電池各有一個值):
用 Windows 11?跟 Windows 10 在同一個地方,都在傳統的電源選項:控制台 → 電源選項 → 變更計劃設定 → 變更進階電源設定 → 睡眠 → 允許喚醒計時器。Windows 11 的「設定 → 系統 → 電源和電池」管的是螢幕和睡眠逾時(也就是多久沒動作後關閉螢幕、進入睡眠),沒有這一項;那邊怎麼改,看這篇。
喚醒計時器是 Windows 的說法,指某個排程工作被允許在指定時間打斷睡眠,不管當下有沒有人在碰電腦。它跟裝置喚醒來源不同。裝置喚醒來源指的是滑鼠、鍵盤、網路卡這類因為「有動靜」而把電腦叫醒的裝置。喚醒計時器是照時鐘發動、不是照輸入發動,這正是為什麼它能在凌晨三點、周圍什麼都沒在動的情況下把電腦叫醒。
背後的機制是工作排程器:任何工作只要在「條件」頁勾了「喚醒電腦來執行這個工作」,就會在下次排定執行時登記一個喚醒計時器。常見的來源有 Windows 自己的維護、Windows Update、磁碟檢查,備份軟體、防毒掃描和部分原廠工具程式也會自己登記。
用系統管理員身分打開命令提示字元或 PowerShell,然後跑:
| 指令 | 顯示什麼 |
|---|---|
powercfg /waketimers | 目前所有排定的喚醒計時器,以及背後是哪個工作設的 |
powercfg /lastwake | 電腦上一次真正被叫醒時,是誰做的 |
powercfg /devicequery wake_armed | 被允許「靠活動」叫醒電腦的裝置(滑鼠、網路卡),不是計時器 |
powercfg /waketimers 只會列出目前排定中的計時器。如果某個工作已經觸發過一次把電腦叫醒了,除非它會重複執行,不然事後就不會再出現在這份清單。如果清單是空的,但電腦還是會自己醒來,可能是計時器已經觸發過、正在等下一次排程,也可能是裝置喚醒來源在叫它。這時接著查 wake_armed。
如果你只是想知道昨晚是誰把它叫醒的、不想等它再發生一次,powercfg /lastwake 比翻事件檢視器快多了。它會點名最近一次把機器從睡眠中叫醒的確切程序、驅動程式(讓 Windows 能控制硬體的程式)或喚醒計時器。早上起來先執行一下,通常就能查出是誰。
控制台 → 電源選項 → 變更計劃設定 → 變更進階電源設定 → 睡眠 → 允許喚醒計時器。有三個選項:啟用(任何喚醒計時器都能觸發)、僅重要喚醒計時器(只放行 Windows 認為重要的)、停用(任何喚醒計時器都不能叫醒電腦)。
適合:先選「僅重要喚醒計時器」當折衷。如果你完全不靠排程備份或更新在半夜執行,就直接選「停用」。注意:筆電的「插電」與「使用電池」是分開設定的。
powercfg /setacvalueindex SCHEME_CURRENT SUB_SLEEP RTCWAKE 0 會停用插電時的喚醒計時器;電池用 /setdcvalueindex。索引 0 是停用、1 是啟用、2 是僅重要喚醒計時器。之後執行 powercfg /setactive SCHEME_CURRENT,改動才會生效。
適合:要一次寫成腳本、套用到多台機器。注意:這只改目前作用中的電源計畫,之後如果切換到其他計畫,這個設定不會一起套用。
當 powercfg /waketimers 或 /lastwake 點名出某個程式或工作時,常見的是這幾個:
如果電腦被叫醒之後一直無法再進入睡眠,那是另一個問題,代表有程式或裝置在電腦醒來後一直使用它。看這篇:Windows 為什麼不睡回去、怎麼揪出擋住它的元兇。
PowerDoze 不會停用喚醒計時器。那純粹是 Windows 的設定,「停用或限制喚醒計時器」那一節的步驟才是真正的解法。PowerDoze 做的是不一樣的事:它排程電腦什麼時候該睡、不同時段該用哪個電源模式,半夜時,把「多久沒動作後進入睡眠」的時間設得短一點、保守一點,而不是隨便用預設值。如果真的有喚醒計時器把電腦提早叫醒,電腦本來就設在低耗電模式,浪費的電會少很多,不會用全速效能模式空轉到早上。
提醒:如果你的電腦會自己醒來,請照「停用或限制喚醒計時器」那一節的步驟處理,那才是對症的做法。PowerDoze 是用來排程整天的睡眠行為,不是用來控制喚醒計時器的。免費最多 3 條依時間的規則、2 個電源模式,不用帳號。
喚醒計時器是 Windows 授權給某個排程工作或程式的權限,讓它可以在指定的時間把電腦從睡眠中叫醒,就算完全沒人碰鍵盤滑鼠也一樣。工作排程器、Windows Update、磁碟維護是常見的來源。它跟滑鼠、網路卡這類「裝置喚醒來源」不同:喚醒計時器是照時間發動,不是照活動發動。
用系統管理員身分開啟命令提示字元或 PowerShell,執行 powercfg /waketimers。它會列出目前所有作用中的喚醒計時器,以及背後是哪個工作設定的。如果現在沒有任何一個在等,它會直接告訴你。喚醒計時器只有在「排定中」時才會出現在這份清單,觸發過後,除非它會重複執行,就不會再顯示。
執行 powercfg /lastwake。它會點名最近一次把電腦從睡眠中叫醒的確切程序、驅動程式或喚醒計時器。電腦昨晚自己醒了、想知道是誰叫醒的,用這個指令就行,不用等它再發生一次。
控制台 → 電源選項 → 變更計劃設定 → 變更進階電源設定 → 睡眠 → 允許喚醒計時器,設成停用。命令列的話:powercfg /setacvalueindex SCHEME_CURRENT SUB_SLEEP RTCWAKE 0(插電)和 powercfg /setdcvalueindex SCHEME_CURRENT SUB_SLEEP RTCWAKE 0(電池),再執行 powercfg /setactive SCHEME_CURRENT 讓設定生效。
跟 Windows 10 在同一個地方,都在傳統的電源選項:控制台 → 電源選項 → 變更計劃設定 → 變更進階電源設定 → 睡眠 → 允許喚醒計時器。Windows 11 的「設定 → 系統 → 電源和電池」管的是螢幕和睡眠逾時,沒有這一項。
這是介於「啟用」和「停用」中間的選項。Windows 只放行它認為重要的喚醒計時器,其餘擋下。哪些算重要由 Windows 決定,我們沒找到官方的完整清單,所以把它當成「叫醒的次數變少」,不是「不會叫醒」。直接整個停用是最嚴的選項,偶爾會讓更新延後。
不能。喚醒計時器是 Windows 的設定,PowerDoze 不會修改它。PowerDoze 做的是排程電腦什麼時候該睡、不同時段該用哪個電源模式,所以就算真的有程式提早叫醒電腦,也能自動切回低耗電模式,而不是全速空轉到早上。
延伸閱讀:Windows 為什麼不睡 · 更改 Windows 什麼時候睡眠 · Windows 有睡眠計時器嗎 · 所有功能