¿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 Sounds
esquema 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\.None
copiarí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-ChildItem
Obtiene todos los eventos de la aplicación.Get-ChildItem
Obtiene 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\Apps
son 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\.None
es 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\.Default
es 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 .Current
clave 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 .Current
valor.
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
}