Это то, что делают мобильные телефоны, т.е. когда вы отключите наушники, музыка останавливается автоматически.
Автоматическое отключение звука
Откройте «Блокнот» и вставьте следующее:
[CmdletBinding ()] Param () #Adding определения для доступа к Audio API Add-Type -TypeDefinition @ ' используя System.Runtime.InteropServices; [Guid ("5CDF2C82-841E-4546-9722-0CF74078229A"), InterfaceType (ComInterfaceType.InterfaceIsIUnknown)] интерфейс IAudioEndpointVolume { // f (), g (), ... являются неиспользуемыми слотами COM-метода. Определите их, если вам интересно int f (); int g (); int h (); int i (); int SetMasterVolumeLevelScalar (float fLevel, System.Guid pguidEventContext); int j (); int GetMasterVolumeLevelScalar (out float pfLevel); int k (); int l (); int m (); int n (); int SetMute ([MarshalAs (UnmanagedType.Bool)] bool bMute, System.Guid pguidEventContext); int GetMute (out bool pbMute); } [Guid ("D666063F-1587-4E43-81F1-B948E807363F"), InterfaceType (ComInterfaceType.InterfaceIsIUnknown)] интерфейс IMMDevice { int Активировать (ref System.Guid id, int clsCtx, int activationParams, out IAudioEndpointVolume aev); } [Guid («A95664D2-9614-4F35-A746-DE8DB63617E6»), InterfaceType (ComInterfaceType.InterfaceIsIUnknown)] интерфейс IMMDeviceEnumerator { int f (); // Неиспользованный int GetDefaultAudioEndpoint (int dataFlow, int role, out конечная точка IMMDevice); } [ComImport, Guid ("BCDE0395-E52F-467C-8E3D-C4579291692E")] класс MMDeviceEnumeratorComObject {} открытый класс Audio { static IAudioEndpointVolume Vol () { var enumerator = new MMDeviceEnumeratorComObject () как IMMDeviceEnumerator; IMMDevice dev = null; Marshal.ThrowExceptionForHR (enumerator.GetDefaultAudioEndpoint (/ * eRender * / 0, / * eMultimedia * / 1, out dev)); IAudioEndpointVolume epv = null; var epvid = typeof (IAudioEndpointVolume) .GUID; Marshal.ThrowExceptionForHR (dev.Activate (ref epvid, / * CLSCTX_ALL * / 23, 0, out epv)); return epv; } public static float Volume { get {float v = -1; Marshal.ThrowExceptionForHR (Vol (). GetMasterVolumeLevelScalar (out v)); return v;} set {Marshal.ThrowExceptionForHR (Vol (). SetMasterVolumeLevelScalar (значение, System.Guid.Empty));} } public static bool Mute { get {bool mute; Marshal.ThrowExceptionForHR (Vol (). GetMute (out mute)); return mute; } set {Marshal.ThrowExceptionForHR (Vol (). SetMute (значение, System.Guid.Empty)); } } } '@ -Подробный В то время как ($ верно) { #Используйте все события в текущем сеансе, начиная с его бесконечного цикла, чтобы начать новый цикл, когда цикл начинается Get-Event | Remove-Event -ErrorAction SilentlyContinue #Registering Event и ожидание запуска события Register-WmiEvent -Class Win32_DeviceChangeEvent Wait-Event -OutVariable Event | Out-Null $ EventType = $ Event.sourceargs.newevent | ` Sort-Object TIME_CREATED -Descending | ` Select-Object EventType -ExpandProperty EventType -Первый 1 #Conditional логика для обработки, когда отключить / unMute машина с помощью Audio API Если ($ EventType -eq 3) { [Audio] :: Mute = $ true Write-Verbose "Отключено [$ ((Get-Date) .tostring ())]" } elseif ($ EventType -eq 2 -and [Audio] :: Mute -eq $ true) { [Аудио] :: Mute = $ false Write-Verbose "UnMuted [$ ((Get-Date) .tostring ())]" } }
Сохраните его с расширением файла PS1. Убедитесь, что вы выбрали «Все файлы» в раскрывающемся списке «Тип файла». Дайте файлу имя, которое скажет вам, что он делает. Сохраните это место, которое вряд ли удастся удалить случайно, но также и там, где вы можете легко найти его, если вам нужно.
Запуск сценария
PowerShell не может просто авторизовать скрипт. Существует встроенная мера безопасности, которая мешает ей это делать, но есть способ обойти ее. У нас есть подробная статья о том, как вы можете это сделать. Следуйте инструкциям, чтобы автоматически запускать сценарий PowerShell, который вы только что создали, и использовать запланированную задачу для запуска скрипта каждый раз при загрузке вашего ПК.