1

システムの音量が変化したにもかかわらず、関数が常に最大数 4294967295 を返すのはなぜですか? 私は何を間違っていますか?

私のシステムは Windows XP SP3 x86 です。

class Program
{
    [DllImport("winmm.dll")]
    private static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume);

    static void Main(string[] args)
    {
        uint currVol;
        int result = waveOutGetVolume(IntPtr.Zero, out currVol);
        if (result != 0)
        {
            Console.WriteLine("Some error occured...");
            Console.ReadKey();
        }
        Console.WriteLine("currVol = {0}", currVol); //always = 4294967295
        ushort left_channel_volume = (ushort)(currVol & 0xffff);
        Console.WriteLine("left_channel_volume = {0}", left_channel_volume); //always = 65535
        Console.ReadKey();
    }
}
4

1 に答える 1

0

回答ありがとうございます。私は正しい答えを受け取っていません。私自身がこの動作の原因を発見しました。問題はまったく異なることが判明しました。

これらの機能は、ハードウェア設定に直接影響しません。さらに、これはプロセス固有のオーディオ セッションに関連付けられているため、変更は呼び出し元のアプリケーションに影響しますが、他のアプリケーションには影響しません...

これが正しいかどうかを確認するには、次のようにします。

  1. 各/メイン デバイスの waveOutSetVolume (0, 0x0) を呼び出します。
  2. waveOutGetVolume を呼び出して正しい結果を取得します。システム ミキサーのボリューム アイコンでは、アプリケーションにボリューム コントロールが表示されます。
于 2013-05-30T09:31:56.773 に答える