

C言語でWindowsアプリを趣味で作っているものですが、パソコンをミュートにしたいのですがどのようにしたらよいのか見当がつきません。  
ミュートにしたいのはYoutubeの音声です。プログラムを実行すると音声がオフになるようにしたいです。  
どなたか対処法を知っている方はいらっしゃいませんか？


CC BY-SA 4.0
2021-05-01T08:22:02.433
75614
2021-05-02T09:33:04.557
2021-05-02T09:33:04.557
43338
43338
question
c windows
C言語で音声ミュート機能を実装したい


コメントにも書きましたが、音声の扱いは難易度が高いです。

  * なんとなく全体を制御する
  * アプリケーションが自分自身の出す音声を制御する
  * 他の特定のアプリケーションの音声を制御する  
（ブラウザーの音声をミュートする等）

  * 特定のデバイスの出力を制御する  
（通話中にオーディオ出力をミュートする等）

どのようなことを実現したいかを明示していただく必要があります。参考までにとりあえず雑な方法を提示しておきます。

* * *

ノートPCやマルチメディアキーボードにはミュートキーを持つものがあります。そのため、Windowsには（該当するキーボードが接続されていなくても）ミュートキーが押された際に行われるべき処理があらかじめ組み込まれています。  
この方法はあくまでミュート・ミュート解除がトグルされるのみとなります。現在のミュート状態を把握し、状態に応じた処理を行うとなるとこの方法は使えません。また、あくまでキー操作扱いなので、画面上に音声の状態を表すポップアップが表示されます。

プログラムからミュートキーが押された状態をエミュレートすれば、結果的にミュート・ミュート解除が行われます。具体的には[`SendInput`関数](https://docs.microsoft.com/en-
us/windows/win32/api/winuser/nf-winuser-
sendinput)に[`VK_VOLUME_MUTE`](https://docs.microsoft.com/en-
us/windows/win32/inputdev/virtual-key-codes#VK_VOLUME_MUTE)を渡すことで実現できます。

[code]

    INPUT input = { INPUT_KEYBOARD, { VK_VOLUME_MUTE } };
    SendInput(1, &input, sizeof input);
    
[/code]


CC BY-SA 4.0
2021-05-01T10:52:53.133
75617
2021-05-01T21:41:25.890
2021-05-01T21:41:25.890
4236
4236
75614
answer