56085


お世話になります。  
C#で下記のことを行いたいのですが、WindowsAPI等で可能でしょうか。

  * デフォルトの再生デバイスのマスターボリュームの取得および設定
  * デフォルトの再生デバイスのミュート状態の取得および設定

とりあえず、WindowsVista以降の方法はわかったのですが、WindowsXPで実装する方法がわからずにいます。  
何かアドバイスをいただけないでしょうか。  
よろしくお願いいたします。


CC BY-SA 4.0
2019-06-25T05:04:57.640
56080
2019-06-25T07:42:10.120
2019-06-25T05:11:46.817
3060
29034
question
c#
Windows XP環境で再生デバイスの音量を取得、操作する方法を知りたい


全般的な説明は[About Audio Mixers](https://docs.microsoft.com/en-
us/windows/desktop/Multimedia/about-audio-
mixers)から辿れます。ただし、ここから辿れるAPIリファレンスはリンクが壊れているため、[Windows
Multimedia](https://docs.microsoft.com/en-
us/windows/desktop/api/_multimedia/)を参照することをお勧めします。また[Audio Mixers in Windows
Vista](https://docs.microsoft.com/en-us/windows/desktop/Multimedia/audio-
mixers-in-windows-
vista)を参照するとわかりますが、XP以前向けの機能はVista以降の新APIとマッピングされているため、正しく作ればそのままVista以降でも動作します。

「デフォルトの再生デバイス」とありますが、Vista以降と異なり、XP以前ではどのアプリがどのラインに出力し、どのスピーカーにつながっているか等と把握できないため、結局のところデバイスID
0に出力するしかない状況です。

基本的な操作方法としては

  1. `mixerOpen`で適切なミキサーを開く（`uMxId`はおおよそ`0`でいいです）
  2. `mixerGetLineInfo`でラインを取得する
  3. `mixerGetLineControls`でラインのボリュームコントロールやミュートコントロールを取得する
  4. `mixerGetControlDetails`で各コントロールの現在値を取得したり、`mixerSetControlDetails`で値を更新したりする
  5. `mixerClose`でミキサーを閉じる

という手順になります。


CC BY-SA 4.0
2019-06-25T07:42:10.120
56085
2019-06-25T07:42:10.120
4236
56080
answer