كيفية كتم الصوت تلقائيًا عند فصل سماعات الرأس على نظام التشغيل Windows 10

يمكن لـ Windows 10 الاحتفاظ بملفات تعريف صوت منفصلة لأجهزة الصوت المختلفة. لكل جهاز صوت تتصل به ، يمكنك تعيين مستوى صوت مختلف وعندما يتم توصيل الجهاز ، سيتم ضبط مستوى الصوت تلقائيًا. بالطبع ، لا أحد يحتفظ بجهاز صوت مكتومًا طوال الوقت. ستقوم بزيادة أو خفض مستوى الصوت ولكن لا أحد عادة يكتم صوت جهاز صوتي.

إذا كنت تستخدم زوجًا من سماعات الرأس مع سطح المكتب ، وغالبًا ما يتعين عليك فصلهما ، فيمكنك استخدام نص PowerShell صغير يعمل على كتم الصوت تلقائيًا عند فصل سماعات الرأس.

هذا شيء تفعله الهواتف المحمولة ، أي عندما تفصل سماعات الرأس ، تتوقف الموسيقى تلقائيًا. المنطق وراء ذلك هو إما أنك استمعت إلى الموسيقى أو أزلت سماعات الرأس عن طريق الخطأ وتحتاج إلى طريقة سريعة لإيقاف تشغيلها. تم كتابة السيناريو في الأساس على هذا المبدأ نفسه Prateek Singh من GEEKEEFY.

كتم الصوت تلقائيًا

افتح المفكرة والصق ما يلي ؛

[cmdletbinding ()] Param () # إضافة تعريفات للوصول إلى واجهة برمجة تطبيقات الصوت. الوظيفة الإضافية -TypeDefinition @ ' باستخدام النظام. مدة العرض. InteropServices ؛ [إرشادات ("5CDF2C82-841E-4546-9722-0CF74078229A") ، InterfaceType (ComInterfaceType. InterfaceIsIUnknown)] واجهة IAudioEndpointVolume { // f ()، g ()،... هي فتحات أسلوب COM غير مستخدمة. حدد هذه إذا كنت تهتم. int f () ؛ int g () ؛ int h () ؛ int i () ؛ int SetMasterVolumeLevelScalar (مستوى عائم ، نظام. دليل pguidEventContext) ؛ int j () ؛ int GetMasterVolumeLevelScalar (خارج تعويم pfLevel) ؛ int k () ؛ int l () ؛ int م () ؛ int n () ؛ int SetMute ([MarshalAs (UnmanagedType. Bool)] bool bMute ، النظام. دليل pguidEventContext) ؛ int GetMute (خارج pbMute منطقي) ؛ } [إرشادات ("D666063F-1587-4E43-81F1-B948E807363F") ، InterfaceType (ComInterfaceType. InterfaceIsIUnknown)] واجهة IMM جهاز { int تنشيط (المرجع النظام. معرف الإرشاد ، clsCtx int ، int التنشيط Param ، خارج IAudioEndpointVolume aev) ؛ } [إرشادات ("A95664D2-9614-4F35-A746-DE8DB63617E6") ، InterfaceType (ComInterfaceType. InterfaceIsIUnknown)] واجهة IMMDeviceEnumerator { int f () ؛ // غير مستعمل. int GetDefaultAudioEndpoint (int dataFlow ، int role ، out IMMDevice endpoint) ؛ } [ComImport، Guid ("BCDE0395-E52F-467C-8E3D-C4579291692E")] فئة MMDeviceEnumeratorComObject {} صوت الطبقة العامة { المجلد IAudioEndpointVolume الثابت () { var enumerator = new MMDeviceEnumeratorComObject () مثل IMMDeviceEnumerator ؛ IMMDevice dev = فارغ ؛ مارشال. ThrowExceptionForHR (العداد. GetDefaultAudioEndpoint (/ * eRender * / 0، / * eMultimedia * / 1، out dev))؛ IAudioEndpointVolume epv = فارغ ؛ var epvid = typeof (IAudioEndpointVolume) .GUID ؛ مارشال. ThrowExceptionForHR (dev. تنشيط (المرجع epvid ، / * CLSCTX_ALL * / 23 ، 0 ، خارج epv)) ؛ عودة epv } حجم تعويم ثابت عام { احصل على {float v = -1 ؛ مارشال. ThrowExceptionForHR (Vol (). GetMasterVolumeLevelScalar (out v)) ؛ العودة v ؛} تعيين {المارشال. ThrowExceptionForHR (Vol (). SetMasterVolumeLevelScalar (قيمة ، نظام. الإرشاد. فارغة))؛} } كتم bool العام الثابت { الحصول على {البكم كتم ؛ مارشال. ThrowExceptionForHR (Vol (). GetMute (out mute)) ؛ عودة كتم الصوت } تعيين {المارشال. ThrowExceptionForHR (Vol (). SetMute (value، System. الإرشاد. فارغة))؛ } } } '@ -Verbose While ($ true) { نظف كل الأحداث في الجلسة الحالية منذ أن كانت في حلقة لا نهائية ، لتبدأ بداية جديدة عندما تبدأ الحلقة. Get-Event | Remove-Event -ErrorAction SilentlyContinue # تسجيل الحدث والانتظار حتى يتم تشغيل الحدث. قم بتسجيل 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. If ($ EventType -eq 3) { [صوتي]: Mute = $ true. الكتابة المطوّلة "تم تجاهل [$ ((Get-Date) .tostring ())]" } elseif ($ EventType -eq 2 -and [Audio]:: Mute -eq $ true) { [صوتي]:: كتم = $ false. الكتابة المطوّلة "غير صامت [$ ((Get-Date) .tostring ())]" } }

حفظه بملحق ملف PS1. تأكد من تحديد "All Files" من القائمة المنسدلة "نوع الملف". امنح الملف اسمًا يخبرك بلمحة عن عمله. احفظه في مكان ما من غير المحتمل أن تحذفه عن طريق الصدفة ولكن أيضًا حيث يمكنك العثور عليه بسهولة إذا كنت بحاجة إليه.

تشغيل البرنامج النصي

لا يمكن لـ PowerShell تشغيل برنامج نصي تلقائيًا. هناك إجراء أمني مدمج يمنعه من القيام بذلك ولكن هناك طريقة حوله. لدينا مقالة مفصلة حول كيفية القيام بذلك. اتبع التعليمات لـ تشغيل البرنامج النصي PowerShell تلقائيًا قمت بإنشائه للتو ، واستخدم مهمة مجدولة لبدء البرنامج النصي في كل مرة تقوم فيها بتشغيل جهاز الكمبيوتر الخاص بك.

بدلاً من ذلك ، يمكنك تشغيل البرنامج النصي يدويًا عند تشغيل نظامك. لقد كنت أستخدمه منذ أقل من 30 دقيقة ولا أعرف كيف كنت أعيش بدونه من قبل.

watch instagram story