显示器关闭时如何关闭声音?

显示器关闭时如何关闭声音?

我想在显示器关闭时关闭声音(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,语法高亮在哪里!?

相关内容