Τρόπος αυτόματης σίγασης ήχου όταν αποσυνδέονται ακουστικά στα Windows 10

click fraud protection

Τα Windows 10 μπορούν να διατηρούν ξεχωριστά προφίλ ήχου για διαφορετικές συσκευές ήχου. Για κάθε συσκευή ήχου που συνδέετε, μπορείτε να ορίσετε διαφορετικό επίπεδο έντασης και όταν η συσκευή είναι συνδεδεμένη, η ένταση θα ρυθμιστεί αυτόματα. Φυσικά, κανείς δεν κρατά μια συσκευή ήχου σε σίγαση όλη την ώρα. Αυξάνουν ή μειώνουν την ένταση, αλλά κανείς συνήθως δεν θέτει σε σίγαση μια συσκευή ήχου.

Εάν χρησιμοποιείτε ένα ζευγάρι ακουστικών με την επιφάνεια εργασίας σας και συχνά πρέπει να τα αποσυνδέσετε, μπορείτε να χρησιμοποιήσετε ένα μικρό σενάριο PowerShell που θα σβήσει αυτόματα τον ήχο όταν αποσυνδέετε τα ακουστικά σας.

Αυτό είναι κάτι που κάνουν τα κινητά τηλέφωνα, δηλαδή, όταν αποσυνδέετε τα ακουστικά σας, η μουσική σταματά αυτόματα. Η λογική πίσω από αυτό είναι ότι είτε έχετε ακούσει μουσική είτε έχετε αφαιρέσει κατά λάθος τα ακουστικά σας και χρειάζεστε έναν γρήγορο τρόπο για να τα απενεργοποιήσετε. Το σενάριο γράφτηκε βασικά με την ίδια αρχή από Prateek Singh της GEEKEEFY.

Αυτόματη σίγαση ήχου

instagram viewer

Ανοίξτε το Σημειωματάριο και επικολλήστε τα ακόλουθα.

[cmdletbinding ()] Param () # Προσθήκη ορισμών για πρόσβαση στο API ήχου. Προσθήκη τύπου -TypeDefinition @ ' χρησιμοποιώντας το Σύστημα. Χρόνος εκτέλεσης. InteropServices; [Οδηγίες ("5CDF2C82-841E-4546-9722-0CF74078229A"), InterfaceType (ComInterfaceType. InterfaceIsIUnknown)] διεπαφή IAudioEndpointVolume { // f (), g (),... είναι μη χρησιμοποιημένες υποδοχές μεθόδου COM. Ορίστε αυτά αν σας ενδιαφέρει. int f (); int g (); int h (); int i (); int SetMasterVolumeLevelScalar (float fLevel, Σύστημα. Οδηγός pguidEventContext); int j (); int GetMasterVolumeLevelScalar (out float pfLevel); int k (); int l (); int m (); int n (); int SetMute ([MarshalAs (UnmanagedType). Bool)] bool bMute, Σύστημα. Οδηγός pguidEventContext); int GetMute (έξω bool pbMute); } [Οδηγίες ("D666063F-1587-4E43-81F1-B948E807363F"), InterfaceType (ComInterfaceType. InterfaceIsIUnknown)] διεπαφή IMMDevice { int Ενεργοποίηση (ref System. Οδηγός id, int clsCtx, int activationParams, out IAudioEndpointVolume aev); } [Οδηγίες ("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 {} δημόσια κλάση ήχου { στατικό IAudioEndpointVolume Vol () { var enumerator = νέο MMDeviceEnumeratorComObject () ως IMMDeviceEnumerator; IMMDevice dev = null; Διευθετώ. ThrowExceptionForHR (απαριθμητής. GetDefaultAudioEndpoint (/ * eRender * / 0, / * eMultimedia * / 1, out dev)); IAudioEndpointVolume epv = null; var epvid = typeof (IAudioEndpointVolume). GUID; Διευθετώ. ThrowExceptionForHR (dev. Ενεργοποίηση (ref epvid, / * CLSCTX_ALL * / 23, 0, out epv)); επιστροφή epv; } δημόσιος στατικός float Volume { λάβετε {float v = -1; Διευθετώ. ThrowExceptionForHR (Vol (). GetMasterVolumeLevelScalar (out v)); επιστροφή v;} ορίστε το {Marshal. ThrowExceptionForHR (Vol (). SetMasterVolumeLevelScalar (τιμή, Σύστημα. Καθοδήγηση. Αδειάζω));} } δημόσια στατική bool Σίγαση { λήψη {bute mute; Διευθετώ. ThrowExceptionForHR (Vol (). GetMute (out mute)); επιστροφή σίγασης; } ορίστε το {Marshal. ThrowExceptionForHR (Vol (). SetMute (τιμή, Σύστημα. Καθοδήγηση. Αδειάζω)); } } } '@ -Verbose While ($ true) { # Καθαρίστε όλα τα συμβάντα στην τρέχουσα περίοδο λειτουργίας από τη στιγμή που βρίσκεται σε άπειρο βρόχο, για να κάνετε μια νέα αρχή όταν ξεκινά ο βρόχος. Λήψη-εκδήλωση | Remove-Event -ErrorAction Silently Συνεχίστε # Καταγραφή του συμβάντος και αναμονή για ενεργοποίηση του συμβάντος. Εγγραφή-WmiEvent -Class Win32_DeviceChangeEvent. Wait-Event -OutVariable Event | Out-Null $ EventType = $ Event.sourceargs.newevent | " Ταξινόμηση-Αντικείμενο TIME_CREATED -Αποβιβάζοντας | " Select-Object EventType -ExpandProperty EventType -First 1 # Υπό όρους λογική για χειρισμό, Πότε για σίγαση / απενεργοποίηση Σίγαση του μηχανήματος χρησιμοποιώντας Audio API. Εάν ($ EventType -eq 3) { [Ήχος]:: Σίγαση = $ true. Γράψε-ρήμα "Σίγαση [$ ([Get-Date) .tostring ())]" } elseif ($ EventType -eq 2 -and [Audio]:: Σίγαση -eq $ true) { [Ήχος]:: Σίγαση = $ false. Γράψε-ρήμα "Μη σίγαση [$ ((Get-Date) .tostring ())]" } }

Αποθηκεύστε το με την επέκταση αρχείου PS1. Βεβαιωθείτε ότι έχετε επιλέξει "Όλα τα αρχεία" από το αναπτυσσόμενο μενού τύπου αρχείου. Δώστε στο αρχείο ένα όνομα που θα σας πει με μια ματιά τι κάνει. Αποθηκεύστε το σε κάποιο μέρος που είναι απίθανο να το διαγράψετε κατά λάθος, αλλά και όπου μπορείτε να το βρείτε εύκολα, αν χρειαστεί.

Εκτέλεση του σεναρίου

Το PowerShell δεν μπορεί να κάνει αυτόματη εκτέλεση ενός σεναρίου. Υπάρχει ένα ενσωματωμένο μέτρο ασφαλείας που το εμποδίζει να το κάνει, αλλά υπάρχει ένας τρόπος για να το αντιμετωπίσει. Έχουμε ένα λεπτομερές άρθρο για το πώς μπορείτε να το κάνετε ακριβώς αυτό. Ακολουθήστε τις οδηγίες για να εκτελέστε αυτόματα το σενάριο PowerShell μόλις δημιουργήσατε και χρησιμοποιήστε μια προγραμματισμένη εργασία για να ξεκινήσετε το σενάριο κάθε φορά που εκκινείτε τον υπολογιστή σας.

Εναλλακτικά, μπορείτε να εκτελέσετε χειροκίνητα το σενάριο κατά την εκκίνηση του συστήματός σας. Το χρησιμοποιώ για λιγότερο από 30 λεπτά και δεν ξέρω πώς έζησα χωρίς αυτό πριν.

watch instagram story