由于高灵敏度游戏鼠标(如 Razer)、网络共享、Windows Update 等原因,即便让电脑进入睡眠状态,也会出现“几秒钟后自动唤醒(或者根本不睡眠)”的现象。以下是我为了 通过 PowerShell 彻底根除这些原因 而总结的日志和命令。

这是一份为觉得在 GUI 中指指点点很麻烦的人准备的 CLI 处方。


1. 现状确认(锁定真凶)

首先,确认“最近是什么原因唤醒了电脑”以及“目前谁有权唤醒电脑”。

管理员权限 打开 PowerShell,并执行以下命令:

# 确认最近的唤醒因素
powercfg -lastwake

# 显示当前拥有唤醒权限的设备列表
powercfg -devicequery wake_armed

常见真凶:

  • HID-compliant mouse / Razer DeathAdder... (鼠标震动检测)
  • Intel(R) Ethernet Controller... (网络唤醒 Wake-on-LAN 或数据包接收)
  • UpdateOrchestrator (Windows Update 的维护任务)

2. 防止鼠标/键盘误触发(Razer 等)

高 DPI 鼠标即使是桌面的轻微震动或空调的风,也会被判定为“操作”,从而解除睡眠。 从设备管理器中寻找很麻烦,所以直接指定设备名称来剥夺其权限。

# 指定特定设备并禁用(名称使用 devicequery 中确认的名称)
powercfg -devicedisablewake "Razer DeathAdder V4 Pro"
powercfg -devicedisablewake "HID-compliant mouse"

【推荐】脚本一键禁用鼠标类设备

由于 Razer 产品等有时会作为虚拟设备生成多个“HID 准合规鼠标”,因此一键禁用更为稳妥。 ※ 请注意:不要禁用键盘,否则除了电源键外将无法唤醒电脑。

# 剥夺所有定点设备(鼠标类)的唤醒权限
Get-CimInstance Win32_PointingDevice | ForEach-Object {
 $name="$_.Name"
 Write-Host "Disabling wake for: "$name'
 powercfg -devicedisablewake '$name"}

3. 防止网络/文件共享导致唤醒

如果开启了媒体服务器功能或文件共享,电脑会被来自其他设备的访问检查所吵醒。

禁用网络适配器

# 禁止通过以太网等网络适配器解除睡眠
Get-NetAdapter | ForEach-Object {
 # 禁用魔术封包唤醒 (Wake on Magic Packet) / 模式匹配唤醒 (Pattern Match)
 Set-NetAdapterPowerManagement -Name $_.Name -WakeOnMagicPacket Disabled -WakeOnPattern Disabled
}

设置为“媒体共享中”也允许睡眠

Windows 默认设置为“媒体共享时不睡眠(离开模式 Away Mode)”。强制将其更改为“允许睡眠”。

# 将“共享媒体时”的设置改为“允许计算机进入睡眠状态”
powercfg -setacvalueindex SCHEME_CURRENT 9596fb26-9850-41fd-ac3e-f7c3c00afd4b 03680956-93bc-4294-bba6-4e0f09bb717f 0
powercfg -setactive SCHEME_CURRENT

4. 防止 Windows Update / 维护任务暴走

诸如 UpdateOrchestrator 之类的任务,即使想在任务计划程序中禁用,也往往会显示 “访问被拒绝” ,连管理员权限也无法停止。

因此,我们的终极方案是禁用整个系统使用“唤醒定时器 (Wake Timers)”的权限。

# 禁用接通电源时的唤醒定时器
powercfg -setacvalueindex SCHEME_CURRENT 238c9fa8-0aad-41ed-83f4-97be242c8f20 bd3b7180-0530-45fb-8885-af2718140a23 0

# 禁用使用电池时的唤醒定时器
powercfg -setdcvalueindex SCHEME_CURRENT 238c9fa8-0aad-41ed-83f4-97be242c8f20 bd3b7180-0530-45fb-8885-af2718140a23 0

# 应用设置
powercfg -setactive SCHEME_CURRENT

番外篇:用 AutoHotkey 确保关闭显示器

如果想通过 Win + z 等快捷键立即关闭显示器,往往会遇到释放按键瞬间的信号导致显示器立即恢复开启的问题。窍门是先用 BlockInput 屏蔽输入再执行。

; Win + z 关闭显示器
#z::
 ; 为了防止因鼠标等输入导致立即恢复,暂时屏蔽输入
 BlockInput, On

 ; 等待按键完全释放
 KeyWait, z
 KeyWait, LWin
 KeyWait, RWin

 ; 以防万一增加缓冲(等待鼠标传感器稳定)
 Sleep, 1000

 ; 关闭显示器电源 (0xF170 = SC_MONITORPOWER, 2 = Off)
 SendMessage, 0x112, 0xF170, 2,, Program Manager

 ; 解除输入屏蔽
 BlockInput, Off
Return

总结

  1. 鼠标 :高灵敏度传感器会因震动触发唤醒,必须禁用。
  2. 网络 :经常漏掉文件共享设置导致的睡眠受阻。
  3. Windows Update :禁用任务会报错,所以要用 Wake Timers 设置来封杀。

至此,终于从半夜电脑自己发光的灵异现象中解脱出来了。