4

以下を使用して、コンピューターのマスター オーディオをミュート/ミュート解除しています。現在、ミュート状態を判断する方法を探しています。C#でこれを行うのと同じくらい簡単な方法はありますか?

    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);
4

3 に答える 3

10

こんにちは、この古いトピックに出くわしましたが、まったく同じ問題を抱えていました。

私は以下を使用して解決しました:

using System.Runtime.InteropServices;

...

[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);


private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
private const int APPCOMMAND_VOLUME_UP = 0xA0000;
private const int APPCOMMAND_VOLUME_DOWN = 0x90000;               
private const int WM_APPCOMMAND = 0x319;        

...

// mute (toggle)
SendMessage(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr)APPCOMMAND_VOLUME_MUTE);


// unmute
SendMessage(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr)APPCOMMAND_VOLUME_UP);
SendMessage(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr)APPCOMMAND_VOLUME_DOWN);

ミュートは常にオーディオをミュートするとは限りません。これはトグルです。しかし、最初に「ミュート解除」を確実に呼び出すと、うまくいくはずです。

よろしくカート

于 2013-06-18T06:50:49.010 に答える
0

上記のコメントの RRUZ の功績によるものです。stackoverflow.com/questions/294292 を参照してください。唯一の問題は、互換モードが必要なことです。

于 2010-12-31T01:34:42.987 に答える
0

次のチュートリアルをご覧ください。私は C# (または他の言語) で Mixer を使ったことがないので、Win32 API の P/Invoking で正しく、車輪を再発明していないと仮定しています。例をダウンロードできます。メソッド GetMixer() が必要なことを行うと思います。

于 2010-12-30T02:47:39.070 に答える