\r\n\r\n

Windowsでヘッドホンを外すと自動的にミュートにする方法

スマートフォンのように、ヘッドホンを外すとパソコンの音声が自動的にミュートされる方法をご紹介します...

ヘッドホンを外すと、パソコンの音声出力が自動的にミュートされるようになったら、いいと思いませんか?これなら、早朝にうっかり同居人を起こしてしまったり、公共の場で間違えてブリトニー・スピアーズへの愛を明かしてしまったりすることもないでしょう。

もちろん、ボリュームミキサーを使って、スピーカーやヘッドホンを1つずつミュートすることも可能です。(Windows10でサウンドをカスタマイズする方法について詳しくはこちら)しかし、正直なところ、PowerShellを使って自動化できるのであれば、これを行う必要はない。

スマート○○のように、ヘッドホンを外すとパソコンの音声が自動的にミュートされる方法をご紹介します。

まず、メモ帳を開き、次のコードを空白の文書に貼り付けます。

[cmdletbinding()]Param()#Adding definiti*** for accessing the Audio APIAdd-Type -TypeDefinition @'using System.Runtime.InteropServices;[Guid("5CDF2C82-841E-4546-9722-0CF74078229A"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]interface IAudioEndpointVolume {// f(), g(), ... are unused COM method slots. Define these if you careint 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)]interface IMMDevice {int Activate(ref System.Guid id, int clsCtx, int activationParams, out IAudioEndpointVolume aev);}[Guid("A95664D2-9614-4F35-A746-DE8DB63617E6"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]interface IMMDeviceEnumerator {int f(); // Unusedint GetDefaultAudioEndpoint(int dataFlow, int role, out IMMDevice endpoint);}[ComImport, Guid("BCDE0395-E52F-467C-8E3D-C4579291692E")] class MMDeviceEnumeratorComObject { }public class Audio {static IAudioEndpointVolume Vol() {var enumerator = new MMDeviceEnumeratorComObject() as 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(value, System.Guid.Empty));}}public static bool Mute {get { bool mute; Marshal.ThrowExceptionForHR(Vol().GetMute(out mute)); return mute; }set { Marshal.ThrowExceptionForHR(Vol().SetMute(value, System.Guid.Empty)); }}}'@ -VerboseWhile($true){#Clean all events in the current session since its in a infinite loop, to make a fresh start when loop beginsGet-Event | Remove-Event -ErrorAction SilentlyContinue#Registering the Event and Waiting for event to be triggeredRegister-WmiEvent -Class Win32_DeviceChangeEventWait-Event -OutVariable Event |Out-Null$EventType = $Event.sourceargs.newevent | `Sort-Object TIME_CREATED -Descending | `Select-Object EventType -ExpandProperty EventType -First 1#Conditional logic to handle, When to Mute/unMute the machine using Audio APIIf($EventType -eq 3) {[Audio]::Mute = $trueWrite-Verbose "Muted [$((Get-Date).tostring())]"}elseif($EventType -eq 2 -and [Audio]::Mute -eq $true){[Audio]::Mute = $falseWrite-Verbose "UnMuted [$((Get-Date).tostring())]"}}

ここで、PS1形式で保存する必要があります。ファイルの保存ダイアログが表示されたら、ドロップダウンメニューから「すべてのファイル」を選択し、ファイル名を「AutoMute.ps1」とします。 ファイル名自体は重要ではありませんので、覚えやすいものを選択してください。

スクリプトを有効にするには、新しく作成したファイルを右クリックして、「実行」を選択します。スクリプトは、コンピュータの電源を切るまで有効です。

これは、PowerShellがあなたの生産性を向上させる数多くの方法のうちの1つです。Windowsの操作性を向上させるPowerShellコマンドレットが多数用意されています。

写真提供:peus/photo

  • 2021-03-24 05:01 に公開
  • 閲覧 ( 23 )
  • 分類:IT

あなたが興味を持っているかもしれない記事

匿名者
匿名者

0 件の投稿

作家リスト

  1. admin 0 投稿
  2. 匿名者 0 投稿

おすすめ