C#通过Windows API获取系统音量
本文关键字:系统 获取 API 通过 Windows | 更新日期: 2023-09-27 18:26:43
我一直在尝试使用C#/Windows API获取当前系统卷。我使用的是Windows 8.1,但我希望该解决方案也适用于Windows 7。
此:
[DllImport("winmm.dll")]
public static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume);
Windows XP之后的系统卷不起作用。
我试过这个:
[DllImport("Audioses.dll", EntryPoint = "GetMasterVolume", SetLastError = true)]
static extern int GetMasterVolume(out float pfLevelDB);
public void getVolume()
{
float f = 0.0F;
int i = GetMasterVolume(out f);
MessageBox.Show(f.ToString());
}
然而,应用程序从未到达MessageBox.Show(…),尽管逐行运行显示它到达GetMasterVolume(out f)然后失败。我想我的声明或用法一定有问题。
输出显示:System.EntryPointNotFoundException
GetMasterVolumeLevel:http://msdn.microsoft.com/en-us/library/windows/desktop/dd316533(v=vs.85).aspx
EntryPointNotFound
表示声明确实错误,并且您的实现无法在指定的dll中找到您请求的方法。我在这里看到的最大的问题是ISimpleAudioVolume
是一个接口,因此所需的方法是一个实例,而不是静态方法,并且需要更多的工作来获取适当类型的实例并返回所需的音量级别。请注意,MSDN和界面本身提到需要启动音频会话才能通过该界面进行操作。