我想在显示器关闭时关闭声音(Windows 10)。我目前有电源设置,可在 15 分钟后关闭显示器。我希望声音也能在那时关闭。
我不确定是否有内置的 Windows 方式可以做到这一点,但如果有外部工具可以做到这一点,那也会有所帮助。
编辑:解决潜在的重复问题——仅使用 nircmd 并不能解决问题。如果我能找到一种方法在 15 分钟不活动后触发它,并在执行某些操作(例如显示器电源设置)时触发它重新打开,那么这只是关闭声音的一种方法。任务调度程序似乎没有可以以这种方式充当计时器的触发器。
答案1
好的,我想在系统空闲(显示器关闭)时停止一个会产生噪音的应用程序,但又不想让系统进入睡眠状态。我意识到我并不关心该应用程序是否被终止,所以我只编写了一个单行脚本来终止它,并将其设置为任务计划程序中的空闲触发器。无需特别终止卷,也无需弄清楚如何检测从空闲状态返回并恢复卷。
奇怪的是,taskkill /im 不起作用,所以我不得不使用以下命令:
wmic process where name="application.exe" call terminate
答案2
打开控制面板并查找声音(或者只需单击开始并搜索“更改系统声音”),在“声音”选项卡下,在程序事件列表中查找设备连接和设备断开连接,然后从下面的下拉菜单中选择“(无)”。
请注意,这样做还会阻止 Windows 在您插入或拔出任何硬件(如 USB、鼠标等)时发出声音。
答案3
我认为可以相对轻松地完成自动热键。
使用任务计划程序,使用程序添加任务:C:\path\to\autohotkey.exe
参数:"C:\...path\to\script.ahk"
在您的帐户下空闲时运行(仅当用户登录时,取消选中 [ ]
如果计算机不再空闲则停止,脚本将自行取消静音并退出):
script.ahk
:
#NoEnv
SoundGet manually_muted,,MUTE
If (manually_muted = "Off") {
currently_idle := A_TimeIdle
SoundSet 1,,MUTE
Loop
{
Sleep 1000
} Until (A_TimeIdle < currently_idle)
SoundSet 0,,MUTE
}
ExitApp
不使用任务计划程序,使用以下脚本(只需运行它,它将驻留使用大约 4 MB 的 RAM):
#NoEnv
#NoTrayIcon
#Persistent
#SingleInstance force
TimeIdleToMute_ms := 15 * 60 * 1000 ; timeout in milliseconds
SetTimer MuteUntilIdleEnds, % TimeIdleToMute_ms
Exit
MuteUntilIdleEnds() {
global TimeIdleToMute_ms
static idlemuted := 0
If (!idlemuted && A_TimeIdle > TimeIdleToMute_ms) {
SoundGet manually_muted,,MUTE
If (manually_muted = "Off") {
idlemuted := A_TimeIdle
SoundSet 1,,MUTE
Loop
{
Sleep 1000 ; ms
} Until (A_TimeIdle < idlemuted)
SoundSet 0,,MUTE
idlemuted := 0
}
}
}
这两个脚本都可以重写以对 Windows 消息做出反应而不是空闲循环,但即使现在资源消耗也可以忽略不计。
第二个脚本在没有管理员权限的情况下运行时,可能无法检测以管理员权限运行的应用程序的活动(当它们处于焦点状态时,它会在超时后静音,尽管用户正在使用它们)。但是,如果您偶尔将焦点切换到非管理员程序,直到超时,则重置计时器就足够了。此外,切换到非管理员程序将结束静音,因为脚本将检测活动。
这两个脚本都经过了编写和快速测试,可能会有错误,请报告并注意:)
PS SE,语法高亮在哪里!?