Как изменить звуковую схему на "нет звука" для существующего пользователя, отредактировав реестр? Я делаю .reg файл со всеми твиками, которые мне нужны на только что установленных окнах, но я застрял с изменением звуковой схемы.

2 ответа2

1

Изменить схему относительно легко. Однако затем вы должны применить новую схему, которая немного сложнее.

Схема "Без звука" имеет название .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

Это (технически) установит выбранную схему, которую вы можете проверить, зайдя в настройки звука и увидев, что выбрана схема « No Sounds . Однако звуки событий все равно будут воспроизводиться, и это потому, что выбранная схема не была применена .

Чтобы применить звуковую схему, соответствующее действие:

  • Для каждого события приложения, соответствующего HKEY_CURRENT_USER\AppEvents\Schemes\Apps\*\* , скопируйте подраздел для имени новой схемы над вызванным подразделом .Current

Например, чтобы применить схему «Нет звуков» к событию System Exclamation, вы должны скопировать HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.None по HKEY_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 ""

Шаг за шагом:

  • 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 ("File Explorer") и sapisvr ("Распознавание речи").

Ключи под каждым ключом приложения являются событиями приложения для этого приложения.

Клавиши под каждой клавишей события приложения - это звуки, воспроизводимые для каждой звуковой схемы. Так что HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.None из звуков не воспроизводится для восклицания системы Windows при использовании схемы «Нет звуков» и HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.Default - звук, воспроизводимый для восклицания системы Windows при использовании схемы Windows по умолчанию.

Кроме того, есть .Current ключ на этом уровне, который является фактическим звуком, который воспроизводится. Предположительно, когда вы выбираете новую схему в пользовательском интерфейсе, он копирует каждую из настроек по отдельности .Current значение.

0

Я только что создал этот скрипт. Используйте на свой риск;

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"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .