通过 Windows 注册表更改 Windows 中的声音方案

Bea*_*ver 5 windows windows-registry

如何通过编辑注册表将现有用户的声音方案更改为“无声音”?我正在制作一个 .reg 文件,其中包含我需要在新安装的 Windows 上进行的所有调整,但我一直坚持更改声音方案。

Ste*_*ary 13

改变方案相对容易。但是,您随后必须应用新方案,这涉及更多的问题。

“No Sounds”方案的名称是.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
Run Code Online (Sandbox Code Playgroud)

这将(从技术上讲)设置选定的方案,您可以通过转到“声音”设置来验证该No Sounds方案是否已被选中。但是,事件声音仍会播放,这是因为尚未应用所选方案。

要应用声音方案,适当的操作是:

  • 对于每个匹配的应用程序事件HKEY_CURRENT_USER\AppEvents\Schemes\Apps\*\*,将新方案名称的子项复制到名为 的子项上.Current

作为一个例子,应用无声音方案系统感叹号时,你就复制HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.NoneHKEY_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 ""
Run Code Online (Sandbox Code Playgroud)

一步步:

  • 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("文件资源管理器") 和sapisvr("语音识别")。

每个应用程序键下的键是该应用程序的应用程序事件。

每个应用程序事件键下的键是为每个声音方案播放的声音。所以HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.None是为Windows播放声音采用无声音方案时系统惊呼一声,HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.Default是为Windows播放声音使用Windows默认方案时系统感叹号。

此外,.Current此级别还有一个键,即实际播放的声音。据推测,当您在 UI 中选择一个新方案时,它会单独复制每个设置的.Current值。

  • 您可以缩短两个堆叠的 gci 和 where => `Get-ChildItem -Path "HKCU:\AppEvents\Schemes\Apps\*\*\.current"` 因为 `Get-ChildItem` 允许在多个级别上使用通配符。 (2认同)