waveOutGetVolume()总是返回4294967295(最大值)
本文关键字:4294967295 最大值 返回 waveOutGetVolume | 更新日期: 2023-09-27 18:15:49
请帮忙,为什么在系统音量发生变化的情况下,函数总是返回最大号码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();
}
}
谢谢大家的回答。我还没有收到正确答案。我自己已经找到了这种行为的原因。问题原来是完全不同的
这些功能不直接影响硬件设置。此外,这与特定于进程的音频会话相关联,因此更改会影响调用应用程序,但不会影响其他应用程序…
检查这个的正确性可以像这样:
- 为每个/主设备调用waveOutSetVolume (0, 0x0);
- 调用waveOutGetVolume并获得正确的结果,而在系统混频器中,音量图标将出现在带有音量控制的应用程序中。