Como posso alterar o esquema de som para “sem som” para o usuário existente editando o registro? Estou criando um arquivo .reg com todos os ajustes necessários em janelas recém-instaladas, mas não consigo alterar o esquema de som.
Responder1
Alterar o esquema é relativamente fácil. No entanto, você então terá queaplicaro novo esquema, que é um pouco mais envolvente.
O esquema "No Sounds" tem o nome .None
; você pode ver isso explorando HKEY_CURRENT_USER\AppEvents\Schemes\Names
.
O esquema selecionado está em HKEY_CURRENT_USER\AppEvents\Schemes
, cujo padrão é .Default
. Portanto, você pode definir o esquema selecionado alterando isto para .None
:
New-ItemProperty -Path HKCU:\AppEvents\Schemes -Name "(Default)" -Value ".None" -Force | Out-Null
Isso definirá (tecnicamente) o esquema selecionado, que você pode verificar acessando as configurações de Sons e ver se o No Sounds
esquema está selecionado. No entanto, os sons do evento ainda serão reproduzidos, e isso ocorre porque o esquema selecionado não foiaplicado.
Para aplicar um esquema de sons, a ação apropriada é:
- Para cada correspondência de evento de aplicativo
HKEY_CURRENT_USER\AppEvents\Schemes\Apps\*\*
, copie a subchave do novo nome do esquema sobre a subchave chamada.Current
.
Por exemplo, para aplicar o esquema No Sounds ao evento System Exclamation, você copiaria HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.None
o arquivo HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.Current
.
Porém, no seu caso, você pode simplesmente limpar todos os valores, já que está aplicando um tema "sem sons". Isso pode ser feito por uma linha:
Get-ChildItem -Path "HKCU:\AppEvents\Schemes\Apps" | Get-ChildItem | Get-ChildItem | Where-Object {$_.PSChildName -eq ".Current"} | Set-ItemProperty -Name "(Default)" -Value ""
Passo a passo:
Get-ChildItem -Path "HKCU:\AppEvents\Schemes\Apps"
obtém todos os aplicativos.Get-ChildItem
obtém todos os eventos do aplicativo.Get-ChildItem
obtém todas as configurações de som de eventos do aplicativo para cada esquema.Where-Object {$_.PSChildName -eq ".Current"}
seleciona todas as configurações de som de eventos do aplicativo aplicadas atualmente.Set-ItemProperty -Name "(Default)" -Value ""
limpa essas configurações de som.
Para mais detalhes:
Parece que as chaves abaixo HKEY_CURRENT_USER\AppEvents\Schemes\Apps
são os aplicativos, sendo o valor padrão uma string de exibição. Os que estão no meu sistema são .Default
("Windows"), Explorer
("Explorador de Arquivos") e sapisvr
("Reconhecimento de Fala").
As chaves em cada chave de aplicativo são os eventos desse aplicativo.
As teclas em cada tecla de evento do aplicativo são os sons a serem reproduzidos para cada esquema de som. O mesmo HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.None
ocorre com o som a ser reproduzido para a Exclamação do Sistema do Windows ao usar o esquema Sem Sons, e HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.Default
é o som a ser reproduzido para a Exclamação do Sistema do Windows ao usar o esquema Padrão do Windows.
Além disso, há uma .Current
tonalidade neste nível que é o som real tocado. Presumivelmente, quando você seleciona um novo esquema na IU, ele copia cada uma das configurações individualmente sobre o .Current
valor.
Responder2
Acabei de criar este script. Use por sua conta e risco;
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"
Responder3
Aqui está meu código para definir esquemas de som como '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
}