Изменить звуковую схему в окнах через реестр
Как изменить звуковую схему на "нет звука" для существующего пользователя, отредактировав реестр? Я делаю.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
("Проводник") и 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"
Вот мой код для установки звуковых схем на "NO SOUND"
Write-Host " Setting Sound Schemes to 'No Sound' .." -foregroundcolor Gray -backgroundcolor black
$Path = "HKCU:\AppEvents\Schemes"
$Keyname = "(Default)"
$SetValue = ".None"
$TestPath = Test-Path $Path
if (-Not($TestPath -eq $True)) {
Write-Host " Creating Folder.. " -foregroundcolor Gray -backgroundcolor black
New-item $path -force
}
if (Get-ItemProperty -path $Path -name $KeyName -EA SilentlyContinue) {
$Keyvalue = (Get-ItemProperty -path $Path).$keyname
if ($KeyValue -eq $setValue) {
Write-Host " The Registry Key Already Exists. " -foregroundcolor green -backgroundcolor black
}
else {
Write-Host " Changing Key Value.. " -foregroundcolor Gray -backgroundcolor black
New-itemProperty -path $Path -Name $keyname -value $SetValue -force # Set 'No Sound' Schemes
Get-ChildItem -Path "HKCU:\AppEvents\Schemes\Apps" | # Apply 'No Sound' Schemes
Get-ChildItem |
Get-ChildItem |
Where-Object { $_.PSChildName -eq ".Current" } |
Set-ItemProperty -Name "(Default)" -Value ""
Write-Host " The Registry Key Value Changed Sucessfully. " -foregroundcolor green -backgroundcolor black
}
}
else {
Write-Host " Creating Registry Key.. " -foregroundcolor Gray -backgroundcolor black
New-itemProperty -path $Path -Name $keyname -value $SetValue -force
Get-ChildItem -Path "HKCU:\AppEvents\Schemes\Apps" |
Get-ChildItem |
Get-ChildItem |
Where-Object { $_.PSChildName -eq ".Current" } |
Set-ItemProperty -Name "(Default)" -Value ""
Write-Host " The Registry Key Created Sucessfully. " -foregroundcolor green -backgroundcolor black
}