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 回答