Изменить звуковую схему в Windows через реестр Windows

Изменить звуковую схему в Windows через реестр Windows

Как изменить звуковую схему на "без звука" для существующего пользователя, отредактировав реестр? Я создаю файл .reg со всеми необходимыми мне настройками на свежеустановленной Windows, но я застрял с изменением звуковой схемы.

решение1

Изменить схему относительно легко. Однако, тогда вам придетсяприменятьновая схема, которая немного сложнее.

Схема «Без звуков» имеет название .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.

Например, чтобы применить схему «Нет звуков» к событию «Системный восклицательный знак», вам нужно 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(«Speech Recognition»).

Ключи под каждым ключом приложения — это события приложения для этого приложения.

Клавиши под каждой клавишей события приложения — это звуки для воспроизведения для каждой звуковой схемы. Также HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.Noneесть звук для воспроизведения для Windows' System Exclamation при использовании схемы No Sounds и HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.Defaultесть звук для воспроизведения для Windows' System Exclamation при использовании схемы Windows Default.

Кроме того, на этом уровне есть .Currentключ, который является фактическим воспроизводимым звуком. Предположительно, когда вы выбираете новую схему в пользовательском интерфейсе, она копирует каждую из настроек по отдельности поверх значения .Current.

решение2

Я только что создал этот скрипт. Используйте на свой страх и риск;

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"

решение3

Вот мой код для установки звуковых схем на «БЕЗ ЗВУКА»

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
}

Связанный контент