Вопрос или проблема
Я хотел бы выключить звук (Windows 10), когда монитор выключается. В настоящее время у меня настройки питания таковы, что монитор выключается через 15 минут. Я хотел бы, чтобы звук отключался в это же время.
Я не уверен, есть ли встроенный способ сделать это в Windows, но если есть внешнее средство для этого, это тоже поможет.
Правка: Отвечая на возможное дублирование — nircmd сам по себе не дает решения. Это всего лишь один метод отключения звука, если мне удастся найти способ запустить его после 15 минут бездействия и снова включить при каком-либо действии, как с настройками питания монитора. Планировщик задач, похоже, не имеет триггера, который можно было бы использовать как таймер в этом смысле.
Хорошо, это было специальное приложение, издающее шум, которое я хотел остановить, когда система переходила в состояние бездействия (и монитор выключался), но не хотел, чтобы система переходила в спящий режим. Я понял, что мне все равно, если приложение будет убито, так что я просто написал однострочный скрипт, чтобы его убить, и установил его для триггера бездействия в планировщике задач. Нет необходимости убивать звук в частности или выяснять, как обнаружить возвращение из бездействия и восстановить звук.
Странно, но taskkill /im не работал, поэтому мне пришлось использовать следующее:
wmic process where name="application.exe" call terminate
Откройте Панель управления и найдите Звук (или просто нажмите “Пуск” и поищите “Изменить системные звуки”), на вкладке “Звук” найдите Подключение устройства и Отключение устройства в списке События программы, и в выпадающем меню ниже выберите “(Нет)”.
Обратите внимание, что это также остановит Windows от воспроизведения звука при подключении или отключении любого оборудования, такого как USB, мышь и т. д.
Я думаю, это можно относительно легко сделать с помощью Autohotkey.
С помощью планировщика задач добавьте задачу с Программой: 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 МБ ОЗУ):
#NoEnv
#NoTrayIcon
#Persistent
#SingleInstance force
TimeIdleToMute_ms := 15 * 60 * 1000 ; таймаут в миллисекундах
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 ; мс
} Until (A_TimeIdle < idlemuted)
SoundSet 0,,MUTE
idlemuted := 0
}
}
}
Оба скрипта могут быть переписаны, чтобы реагировать на сообщения Windows вместо цикла бездействия, но даже сейчас потребление ресурсов незначительно.
Второй скрипт, при запуске без прав администратора, может иметь проблемы с обнаружением активности приложений, работающих с правами администратора (он будет выключать звук по истечении таймаута, когда они в фокусе, несмотря на то, что пользователь работает с ними). Однако если вы время от времени переключаете фокус на программы без прав администратора до истечения таймаута, этого будет достаточно для сброса таймера. Кроме того, переключение на программу без прав администратора завершит отключение звука, поскольку скрипт обнаружит активность.
Оба скрипта написаны и быстро протестированы для ответа, могут быть ошибки, сообщите и остерегайтесь 🙂
P.S. SE, где подсветка синтаксиса!?
Ответ или решение
Чтобы отключить звук при выключении монитора в Windows 10, вам, возможно, придется применить несколько различных подходов. Поскольку в самой операционной системе нет встроенной функции для автоматического контроля звука в зависимости от состояния дисплея, вот несколько эффективных методов, которые помогут вам решить вашу задачу.
1. Использование Task Scheduler и WMIC
Если вы хотите остановить звук определенного приложения при отключении монитора, вы можете использовать планировщик задач. Данный метод требует создания задачи, которая завершает процесс вашего приложения после определенного времени бездействия.
Шаги:
-
Откройте Планировщик задач:
- Нажмите на клавиши
Win + R
, введитеtaskschd.msc
и нажмитеEnter
.
- Нажмите на клавиши
-
Создайте новую задачу:
- В меню «Действия» выберите «Создать задачу».
-
Настройте триггер:
- Перейдите на вкладку «Триггеры» и выберите «Создать» для добавления нового триггера.
- Выберите тип триггера «При простое время неактивности» и установите время на 15 минут.
-
Настройте действие:
- На вкладке «Действия» выберите «Создать» и затем в поле «Программа или скрипт» укажите
wmic
. - В поле «Добавить аргументы» введите:
process where name="application.exe" call terminate
- Замените
application.exe
на имя вашего конкретного приложения.
- На вкладке «Действия» выберите «Создать» и затем в поле «Программа или скрипт» укажите
-
Отключите параметр «Остановить, если компьютер перестает быть неактивным».
2. Использование AutoHotkey
Если вы хотите более гибкий контроль за звуком в зависимости от состояния системы, вы можете использовать AutoHotkey. Это мощный инструмент, который позволяет создавать скрипты для автоматизации множества задач в Windows.
Шаги по созданию скрипта:
-
Скачайте и установите AutoHotkey с официального сайта.
-
Создайте новый скрипт:
- Нажмите правой кнопкой мыши на рабочем столе, выберите «Создать» -> «AutoHotkey Script» и назовите файл.
-
Редактируйте скрипт:
- Добавьте следующий код в ваш скрипт:
#NoEnv #Persistent #SingleInstance, Force TimeIdleToMute_ms := 15 * 60 * 1000 ; таймаут в миллисекундах SetTimer MuteUntilIdleEnds, % TimeIdleToMute_ms Return 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 ; мс } Until (A_TimeIdle < idlemuted) SoundSet, 0,, MUTE idlemuted := 0 } } }
-
Сохраните изменения и дважды щелкните на скрипте, чтобы запустить его.
3. Настройки звука в Windows
Если вы хотите отключить системные звуки, связанные с подключением и отключением устройств, вы можете сделать это следующим образом:
- Откройте Панель управления и выберите Звук.
- Перейдите на вкладку Звуки.
- Найдите события Device Connect и Device Disconnect в списке и установите для них значение (Нет).
Следует учитывать, что это также отменит звуки при подключении или отключении USB-устройств.
Заключение
Каждый из предложенных методов имеет свои преимущества и недостатки. Выберите тот, который лучше всего соответствует вашим потребностям. Используя Task Scheduler и AutoHotkey, вы сможете качественно управлять звуками, избегая ненужных раздражающих сигналов, когда экран отключен.