Вопрос или проблема
Я хотел бы автоматически отключать системный звук Windows 8.1 при входе в компьютер.
Предпочтительно, я бы сделал это через групповую политику, однако я не нашел ничего, что с этим связано. Я также предпочел бы не использовать сторонние программы. Этот вопрос содержал скрипт, который, казалось, работал, однако вход в систему, когда звук уже отключен, и отправка команды ‘mute’ включает звук системы, что делает его бесполезным в этой ситуации. Кроме того, скрипты входа не предпочтительны, так как они загружаются вместе с программами запуска и прочим.
Существует ли групповая политика, которую я мог бы упустить, или способ изменить скрипт, чтобы он запускался только в том случае, если звук еще не отключен?
VBScript, который я сейчас использую для отправки команды отключения звука при входе:
Set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys(chr(&hAD))
Вы можете сделать это через Звуки компьютера
.
Проверьте это – Изменение звуков компьютера.
А) Вы можете отключить аудиослужбу (выполнить > services.msc) под названием “Windows Audio”, где вы останавливаете службу, а затем в свойствах устанавливаете тип запуска: Отключено. Но помните, администраторы всегда могут запустить аудиослужбу Windows, обычный пользователь не может ее запустить!
Б) Просто отключите звуковую карту в диспетчере устройств (выполнить > devmgmt.msc), найдите свое звуковое устройство и отметьте как отключенное.
В) Существует другой “ловкий” способ через GPO с настройкой безопасности, где вы можете отключить всю аудиослужбу Windows, но это ловкий способ, потому что некоторые функции в secpol.msc отсутствуют, поэтому вам необходимо создать свой собственный шаблон безопасности через выполнение > mmc > Добавить оснастку > Конфигурация и анализ безопасности; Шаблоны безопасности > создать новый шаблон > Службы системы > Windows Audio установить как отключено; затем через модуль Конфигурации и анализа безопасности создать новую базу данных безопасности, импортировать ваш шаблон и применить конфигурацию. Существует руководство о том, как это сделать, но с другими настройками secpol: https://www.youtube.com/watch?v=nvEA8qWfBlA
Ответ или решение
Конфигурация системного звука Windows при входе в учетную запись может быть важной задачей для пользователей, которые предпочитают, чтобы их устройства работали в тихом режиме. Это особенно актуально для офисных сред или домашних условий, где случайные звуки могут быть нежелательными. Давайте разберем, как добиться автоматического отключения звука на компьютере с Windows 8.1 при входе в систему, с акцентом на детализацию и без использования стороннего ПО.
Теория
По своему устройству, операционная система Windows предлагает множество настроек управления звуком, однако автоматическое отключение звука при старте системы может быть не столь очевидной задачей. Групповая политика (GPO), хоть и предоставляет множество инструментов для администрирования, не содержит встроенной возможности конкретно для этой задачи. Кроме того, использование скриптов, как, например, VBScript для отправки "горячих клавиш", может привести к непредсказуемым результатам, если система уже находится в состоянии "без звука". Альтернативными методами могли бы быть отключение аудиослужбы или отключение звуковой карты, но такие подходы могут оказывать слишком обширное влияние, препятствуя полноценному использованию звука в будущем.
Пример
Ваш запрос касается использования VBScript, который управляет системными клавишами:
Set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys(chr(&hAD))
Этот скрипт отправляет горячую клавишу для переключения статуса "Без звука", что может вести к проблемам, если звук уже отключен. В вашем случае, необходимо способ определения текущего состояния звуковой системы и соответствующего реагирования.
Применение
Для решения этой задачи без сторонних программ существуют различные подходы, которые мы можем рассмотреть.
1. Использование планировщика задач Windows
Вы можете использовать встроенный в Windows Планировщик заданий для запуска скрипта при входе в систему. Однако для этого стоит доработать ваш скрипт, чтобы он сначала проверял, находится ли система в немом состоянии.
Вот пример усовершенствованного скрипта на PowerShell, который можно интегрировать через Планировщик задач:
Add-Type -TypeDefinition @"
using System.Runtime.InteropServices;
public class AudioEndpointVolume {
[DllImport("Ole32.dll")]
private static extern int CoInitializeEx(int reserved, int mc);
[DllImport("Ole32.dll")]
private static extern void CoUninitialize();
private const int COINIT_APARTMENTTHREADED = 0x2;
[DllImport("ole32.dll")]
private static extern int CoCreateInstance(
[MarshalAs(UnmanagedType.LPStruct)] Guid rclsid,
IntPtr pUnkOuter,
int dwClsContext,
[MarshalAs(UnmanagedType.LPStruct)] Guid riid,
out object ppv
);
[ComImport]
[Guid("5CDF2C82-841E-4546-9722-0CF74078229A")]
private class MMDeviceEnumerator {
}
[ComImport]
[Guid("D666063F-1587-4E43-81F1-B948E807363F")]
private interface IMMDevice {
}
[ComImport]
[Guid("BCDE0395-E52F-467C-8E3D-C4579291692E")]
private interface IMMDeviceEnumerator {
void _VtblGap1_1(); // Skip 1 method
int GetDefaultAudioEndpoint(int dataFlow, int role, out IMMDevice ppDevice);
}
[ComImport]
[Guid("1BE09788-6894-4089-8586-9A2A6C265AC5")]
private interface IAudioEndpointVolume {
void _VtblGap1_6(); // Skip 6 methods
int GetMute(out bool pbMute);
int SetMute(bool bMute, ref Guid pguid);
}
// Main
public static void ToggleMute() {
CoInitializeEx(0, COINIT_APARTMENTTHREADED);
var iid_MMDeviceEnum = typeof(IMMDeviceEnumerator).GUID;
var iid_AudioEndpointVolume = typeof(IAudioEndpointVolume).GUID;
object enumeratorObj;
CoCreateInstance(typeof(MMDeviceEnumerator).GUID, IntPtr.Zero, 1, iid_MMDeviceEnum, out enumeratorObj);
IMMDeviceEnumerator enumerator = (IMMDeviceEnumerator)enumeratorObj;
IMMDevice device;
enumerator.GetDefaultAudioEndpoint(0, 1, out device);
var audioEndpointVolume = (IAudioEndpointVolume)device;
bool isMuted;
audioEndpointVolume.GetMute(out isMuted);
if (!isMuted) {
Guid nullGuid = Guid.Empty;
audioEndpointVolume.SetMute(true, ref nullGuid);
}
CoUninitialize();
}
}
"@
[AudioEndpointVolume]::ToggleMute()
Этот скрипт осуществляет проверку текущего состояния немоты и отключает звук только при необходимости. Настройте запуск данного скрипта через Планировщик задач так, чтобы он запускался при входе в систему.
2. Изменение звуковой схемы
Вы также можете настроить звуковую схему так, чтобы системные звуки были по умолчанию отключены. Это касается не столько полной немоты, сколько устранения аудио-уведомлений при старте. В "Панели управления" выберите "Звук", затем перейдите на вкладку "Звуки" и выберите "Нет звука" в качестве звуковой схемы.
Заключение
Хотя использование групповой политики для решения этой задачи может представлять интерес, она все же не предоставляет специфического инструмента для управления именно уровнем звука. Лучшие решения могут включать использование скриптов PowerShell в сочетании с Планировщиком задач или модификацию звуковой схемы через Панель управления. В каждом случае критично учитывать текущие настройки системы, чтобы избежать обратных эффектов, таких как случайное включение звука.