Modifica lo schema audio in Windows tramite il registro


3

Come posso modificare lo schema audio in "nessun suono" per l'utente esistente modificando il registro? Sto creando un file .reg con tutte le modifiche di cui ho bisogno su Windows appena installato, ma sono bloccato con il cambiamento dello schema audio.

Risposte:


7

Cambiare lo schema è relativamente facile. Tuttavia, è necessario applicare il nuovo schema, che è un po 'più coinvolto.

Lo schema "Nessun suono" ha il nome .None; puoi vederlo esplorando HKEY_CURRENT_USER\AppEvents\Schemes\Names.

Lo schema selezionato è a HKEY_CURRENT_USER\AppEvents\Schemes, il cui valore predefinito è .Default. Quindi puoi impostare lo schema selezionato modificandolo in .None:

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

Ciò imposterà (tecnicamente) lo schema selezionato, che è possibile verificare andando alle impostazioni Suoni e vedere che lo No Soundsschema è selezionato. Tuttavia, i suoni dell'evento continueranno a suonare, e questo perché lo schema selezionato non è stato applicato .

Per applicare uno schema sonoro, l'azione appropriata è:

  • Per ogni corrispondenza di evento dell'app HKEY_CURRENT_USER\AppEvents\Schemes\Apps\*\*, copia la sottochiave per il nuovo nome di schema sulla sottochiave chiamata .Current.

A titolo di esempio, di applicare il regime Nessun suono per l'evento Sistema esclamativo, occorre copiare HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.Nonesopra HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.Current.

Tuttavia, nel tuo caso, puoi semplicemente cancellare tutti i valori, poiché stai applicando un tema "senza suoni". Questo può essere realizzato da un one-liner:

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

Passo dopo passo:

  • Get-ChildItem -Path "HKCU:\AppEvents\Schemes\Apps" ottiene tutte le app.
  • Get-ChildItem ottiene tutti gli eventi dell'app.
  • Get-ChildItem ottiene tutte le impostazioni audio dell'evento app per ogni schema.
  • Where-Object {$_.PSChildName -eq ".Current"} seleziona tutte le impostazioni audio dell'evento app attualmente applicate.
  • Set-ItemProperty -Name "(Default)" -Value "" cancella quelle impostazioni audio.

Per un po 'più di dettaglio:

Sembra che le chiavi in HKEY_CURRENT_USER\AppEvents\Schemes\Appsbasso siano le app, con il loro valore predefinito è una stringa di visualizzazione. Quelli sul mio sistema sono .Default("Windows"), Explorer("Esplora file") e sapisvr("Riconoscimento vocale").

Le chiavi in ​​ciascuna chiave dell'app sono gli eventi dell'app per quell'app.

I tasti sotto ogni tasto evento dell'app sono i suoni da riprodurre per ogni schema sonoro. Così HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.Noneè il suono da riprodurre per l'esclusione di sistema di Windows quando si utilizza lo schema Nessun suono, ed HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.Defaultè il suono da riprodurre per l'esclusione di sistema di Windows quando si utilizza lo schema predefinito di Windows.

Inoltre, c'è una .Currentchiave a questo livello che è il suono reale che viene riprodotto. Presumibilmente, quando si seleziona un nuovo schema nell'interfaccia utente, copia ciascuna delle impostazioni singolarmente sul .Currentvalore.


Grazie per una risposta così dettagliata, proverò questa soluzione un po 'più tardi
Castoro barbuto il

È possibile abbreviare i due gci in pila e dove => in Get-ChildItem -Path "HKCU:\AppEvents\Schemes\Apps\*\*\.current"quanto Get-ChildItemconsente i caratteri jolly su più livelli.
LotPings

0

Ho appena creato questo script. Utilizzare a proprio rischio;

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"

Sfortunatamente, questo non ha funzionato per me su Windows 10 build 14393
jippyjoe4

0

Ecco il mio codice per impostare gli schemi audio su "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
}

Questo sembra in qualche modo simile alla risposta di Jacob Brown . Come è diverso? (È meglio?) Per favore non rispondere nei commenti; modifica la  tua risposta per renderla più chiara e completa.
Scott,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.