Cambiar el esquema de sonido en Windows a través del Registro de Windows

Cambiar el esquema de sonido en Windows a través del Registro de Windows

¿Cómo puedo cambiar el esquema de sonido a "sin sonido" para un usuario existente editando el registro? Estoy creando un archivo .reg con todos los ajustes que necesito en Windows recién instalado, pero no puedo cambiar el esquema de sonido.

Respuesta1

Cambiar el esquema es relativamente fácil. Sin embargo, entonces tienes queaplicarel nuevo plan, que es un poco más complicado.

El esquema "Sin sonidos" tiene el nombre .None; Puedes ver esto explorando HKEY_CURRENT_USER\AppEvents\Schemes\Names.

El esquema seleccionado está en HKEY_CURRENT_USER\AppEvents\Schemes, cuyo valor predeterminado es .Default. Entonces puedes configurar el esquema seleccionado cambiando esto a .None:

New-ItemProperty -Path HKCU:\AppEvents\Schemes -Name "(Default)" -Value ".None" -Force | Out-Null

Esto (técnicamente) establecerá el esquema seleccionado, que puede verificar yendo a la configuración de Sonidos y ver que el No Soundsesquema está seleccionado. Sin embargo, los sonidos del evento seguirán sonando, y eso se debe a que el esquema seleccionado no ha sidoaplicado.

Para aplicar un esquema de sonidos la acción adecuada es:

  • Para cada evento de aplicación que coincida HKEY_CURRENT_USER\AppEvents\Schemes\Apps\*\*, copie la subclave del nuevo nombre del esquema sobre la subclave llamada .Current.

Como ejemplo, para aplicar el esquema Sin sonidos al evento de exclamación del sistema, HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.Nonecopiaría HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.Current.

Sin embargo, en su caso, puede borrar todos los valores, ya que está aplicando un tema "sin sonidos". Esto se puede lograr con una sola línea:

Get-ChildItem -Path "HKCU:\AppEvents\Schemes\Apps" | Get-ChildItem | Get-ChildItem | Where-Object {$_.PSChildName -eq ".Current"} | Set-ItemProperty -Name "(Default)" -Value ""

Paso a paso:

  • Get-ChildItem -Path "HKCU:\AppEvents\Schemes\Apps"obtiene todas las aplicaciones.
  • Get-ChildItemObtiene todos los eventos de la aplicación.
  • Get-ChildItemObtiene todas las configuraciones de sonido de eventos de la aplicación para cada esquema.
  • Where-Object {$_.PSChildName -eq ".Current"}selecciona todas las configuraciones de sonido de eventos de la aplicación que están aplicadas actualmente.
  • Set-ItemProperty -Name "(Default)" -Value ""borra esas configuraciones de sonido.

Para un poco más de detalle:

Parece que las claves a continuación HKEY_CURRENT_USER\AppEvents\Schemes\Appsson las aplicaciones, y su valor predeterminado es una cadena de visualización. Los que están en mi sistema son .Default("Windows"), Explorer("Explorador de archivos") y sapisvr("Reconocimiento de voz").

Las claves debajo de cada clave de aplicación son los eventos de la aplicación para esa aplicación.

Las teclas debajo de cada tecla de evento de la aplicación son los sonidos que se reproducirán para cada esquema de sonido. También lo HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.Nonees el sonido que se reproduce para la exclamación del sistema de Windows cuando se usa el esquema Sin sonidos, y HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.Defaultes el sonido que se reproduce para la exclamación del sistema de Windows cuando se usa el esquema predeterminado de Windows.

Además, hay una .Currentclave en este nivel que es el sonido real que se reproduce. Presumiblemente, cuando selecciona un nuevo esquema en la interfaz de usuario, copia cada una de las configuraciones individualmente sobre el .Currentvalor.

Respuesta2

Acabo de crear este script. Úselo bajo su propio riesgo;

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"

Respuesta3

Aquí está mi código para configurar esquemas de sonido en 'SIN SONIDO'

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
}

información relacionada