Как изменить звуковую схему на "нет звука" для существующего пользователя, отредактировав реестр? Я делаю .reg файл со всеми твиками, которые мне нужны на только что установленных окнах, но я застрял с изменением звуковой схемы.
2 ответа
Изменить схему относительно легко. Однако затем вы должны применить новую схему, которая немного сложнее.
Схема "Без звука" имеет название .None
; Вы можете увидеть это, HKEY_CURRENT_USER\AppEvents\Schemes\Names
.
Выбранная схема находится по адресу HKEY_CURRENT_USER\AppEvents\Schemes
, по умолчанию используется значение .Default
Таким образом, вы можете установить выбранную схему, изменив это на .None
:
New-ItemProperty -Path HKCU:\AppEvents\Schemes -Name "(Default)" -Value ".None" -Force | Out-Null
Это (технически) установит выбранную схему, которую вы можете проверить, зайдя в настройки звука и увидев, что выбрана схема « No Sounds
. Однако звуки событий все равно будут воспроизводиться, и это потому, что выбранная схема не была применена .
Чтобы применить звуковую схему, соответствующее действие:
- Для каждого события приложения, соответствующего
HKEY_CURRENT_USER\AppEvents\Schemes\Apps\*\*
, скопируйте подраздел для имени новой схемы над вызванным подразделом.Current
Например, чтобы применить схему «Нет звуков» к событию System Exclamation, вы должны скопировать HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.None
по HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.Current
Тем не менее, в вашем случае вы можете просто очистить все значения, так как вы применяете тему "без звуков". Это может быть достигнуто с помощью одной строки:
Get-ChildItem -Path "HKCU:\AppEvents\Schemes\Apps" | Get-ChildItem | Get-ChildItem | Where-Object {$_.PSChildName -eq ".Current"} | Set-ItemProperty -Name "(Default)" -Value ""
Шаг за шагом:
Get-ChildItem -Path "HKCU:\AppEvents\Schemes\Apps"
получает все приложения.Get-ChildItem
получает все события приложения.Get-ChildItem
получает все настройки звука событий приложения для каждой схемы.Where-Object {$_.PSChildName -eq ".Current"}
выбирает все настройки звука событий приложения, которые применяются в данный момент.Set-ItemProperty -Name "(Default)" -Value ""
удаляет эти настройки звука.
Для более подробной информации:
Похоже, что ключи в HKEY_CURRENT_USER\AppEvents\Schemes\Apps
являются приложениями, значение по умолчанию - строка отображения. Те, что в моей системе .Default
("Windows"), « Explorer
("File Explorer") и sapisvr
("Распознавание речи").
Ключи под каждым ключом приложения являются событиями приложения для этого приложения.
Клавиши под каждой клавишей события приложения - это звуки, воспроизводимые для каждой звуковой схемы. Так что HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.None
из звуков не воспроизводится для восклицания системы Windows при использовании схемы «Нет звуков» и HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.Default
- звук, воспроизводимый для восклицания системы Windows при использовании схемы Windows по умолчанию.
Кроме того, есть .Current
ключ на этом уровне, который является фактическим звуком, который воспроизводится. Предположительно, когда вы выбираете новую схему в пользовательском интерфейсе, он копирует каждую из настроек по отдельности .Current
значение.
Я только что создал этот скрипт. Используйте на свой риск;
if (-Not (Test-Path 'HKCU:\AppEvents\Schemes\Names\.None'))
{
New-Item -Path 'HKCU:\AppEvents\Schemes\Names' -Name '.None'
New-ItemProperty -Path 'HKCU:\AppEvents\Schemes\Names\.None' -Name '(Default)' -Type 'String' -Value 'No Sounds'
}
Get-ChildItem -Path 'HKCU:\AppEvents\Schemes\Apps\.Default' | Select Name | ForEach-Object {
$thing = $_.Name -replace "HKEY_CURRENT_USER", "HKCU:"
$fullnun = "$thing\.None"
if (-Not (Test-Path $thing))
{
New-Item -Path $thing -Name '.None'
echo "$thing\.None created"
} else {
echo "$thing\.None already existed"
}
if (Test-Path($fullnun))
{
New-ItemProperty -Path $fullnun -Name '(Default)' -Type 'String' -Value ''
}
}
Set-ItemProperty -Path 'hkcu:\AppEvents\Schemes' -Name "(Default)" -Type "String" -Value ".None"