web-dev-qa-db-ja.com

C#を使用してWindowsボリュームをミュートする

誰もがプログラムでWindowsをミュートする方法を知っていますXP C#を使用してボリューム?

17
jinsungy

P/Invokeに対してこれを宣言します。

private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
private const int WM_APPCOMMAND = 0x319;

[DllImport("user32.dll")]
public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);

次に、この行を使用してサウンドをミュート/ミュート解除します。

SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr) APPCOMMAND_VOLUME_MUTE);
12
Jorge Ferreira

Windows Vista/7およびおそらく8にも使用できるもの:

NAudio を使用できます。
最新バージョンをダウンロードします。 DLLを抽出し、C#プロジェクトでDLL NAudioを参照します。

次に、次のコードを追加して、使用可能なすべてのオーディオデバイスを反復処理し、可能であればミュートします。

try
{
    //Instantiate an Enumerator to find audio devices
    NAudio.CoreAudioApi.MMDeviceEnumerator MMDE = new NAudio.CoreAudioApi.MMDeviceEnumerator();
    //Get all the devices, no matter what condition or status
    NAudio.CoreAudioApi.MMDeviceCollection DevCol = MMDE.EnumerateAudioEndPoints(NAudio.CoreAudioApi.DataFlow.All, NAudio.CoreAudioApi.DeviceState.All);
    //Loop through all devices
    foreach (NAudio.CoreAudioApi.MMDevice dev in DevCol)
    {
        try
        {
            //Show us the human understandable name of the device
            System.Diagnostics.Debug.Print(dev.FriendlyName);
            //Mute it
            dev.AudioEndpointVolume.Mute = true;
        }
        catch (Exception ex)
        {
            //Do something with exception when an audio endpoint could not be muted
        }
    }
}
catch (Exception ex)
{
    //When something happend that prevent us to iterate through the devices
}
4
Mike de Klerk

私は出くわしました このプロジェクト あなたがVistaを実行しているなら、それは興味深いかもしれません。

2
itsmatt

プログラムでWindowsをミュートする方法XP C#を使用したボリューム?

void SetPlayerMute(int playerMixerNo, bool value)
{
    Mixer mx = new Mixer();
    mx.MixerNo = playerMixerNo;
    DestinationLine dl = mx.GetDestination(Mixer.Playback);
    if (dl != null)
    {
        foreach (MixerControl ctrl in dl.Controls)
        {
            if (ctrl is MixerMuteControl)
            {
                ((MixerMuteControl)ctrl).Value = (value) ? 1 : 0;
                break;
            }
        }
    }
}
2
Aleks

ここで説明されているように、P/Invokeを使用できます: http://www.Microsoft.com/indonesia/msdn/pinvoke.aspx 。実際には、タスク1:上部近くのサウンドのミュートとミュート解除の手順を実行します。

0
Jim B-G

MCIコマンドを使用することをお勧めします: http://msdn.Microsoft.com/en-us/library/ms709461(VS.85).aspx

これにより、ウィンドウの入力ミキサーと出力ミキサーを一般的に適切に制御できますが、マイクブーストの設定など、詳細な制御を行うのが難しい場合があることを付け加えておきます。

ああ、Vistaを使用している場合は、忘れてください。全く違うモデルです。

0
4chen500