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

C#通过Windows API获取系统音量

EntryPointNotFound表示声明确实错误,并且您的实现无法在指定的dll中找到您请求的方法。我在这里看到的最大的问题是ISimpleAudioVolume是一个接口,因此所需的方法是一个实例,而不是静态方法,并且需要更多的工作来获取适当类型的实例并返回所需的音量级别。请注意,MSDN和界面本身提到需要启动音频会话才能通过该界面进行操作。