Cod*_*987 3 c# windows visual-c++
如何在Windows 7中获取系统的当前主卷?
我在谷歌中查了一下,但每个解决方案都返回了值,-1
无论4686346
是否清楚地解释了它们的含义.
您正在寻找EndpointVolume
API.这是Windows Vista中发布的新音频API的一部分,可用于获取或设置主音量.
由于您不需要在Vista之前支持Windows版本(即Windows XP),因此在这些操作系统版本之间对相关基础架构进行了重大更改,因此这项工作变得相当容易.这可能是您尝试过的现有样品无法正常工作的原因.
CodeProject上有一个完整的托管包装库:Vista Core Audio API Master Volume Control.它可能实现了比您需要的功能更多的功能,但您可以了解从C#应用程序确定主系统卷需要执行的操作.
好的,对于那些寻找命令行或C++选项的人来说,这里有一些使用IAudioEndpointVolume API的源代码.
事实证明,有一些"标量"方法可以正常工作,并返回0到100之间的数字(使用getter和setter).
来源:https: //gist.github.com/rdp/8363580
这里命令行构建它.
由于您将C#用作标签,因此这里有一个小型C#控制台应用程序可以获取它。它基于GetMasterVolumeLevelScalar方法(Vista或更高版本)。
GetMasterVolumeLevelScalar方法获取进入或离开音频端点设备的音频流的主音量级别。音量级别表示为0.0到1.0范围内的标准化音频音量值。
class Program
{
static void Main(string[] args)
{
Console.WriteLine(VolumeUtilities.GetMasterVolume());
}
}
public static class VolumeUtilities
{
public static float GetMasterVolume()
{
// get the speakers (1st render + multimedia) device
IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator)(new MMDeviceEnumerator());
IMMDevice speakers;
const int eRender = 0;
const int eMultimedia = 1;
deviceEnumerator.GetDefaultAudioEndpoint(eRender, eMultimedia, out speakers);
object o;
speakers.Activate(typeof(IAudioEndpointVolume).GUID, 0, IntPtr.Zero, out o);
IAudioEndpointVolume aepv = (IAudioEndpointVolume)o;
float volume = aepv.GetMasterVolumeLevelScalar();
Marshal.ReleaseComObject(aepv);
Marshal.ReleaseComObject(speakers);
Marshal.ReleaseComObject(deviceEnumerator);
return volume;
}
[ComImport]
[Guid("BCDE0395-E52F-467C-8E3D-C4579291692E")]
private class MMDeviceEnumerator
{
}
[Guid("5CDF2C82-841E-4546-9722-0CF74078229A"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
private interface IAudioEndpointVolume
{
void _VtblGap1_6();
float GetMasterVolumeLevelScalar();
}
[Guid("A95664D2-9614-4F35-A746-DE8DB63617E6"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
private interface IMMDeviceEnumerator
{
void _VtblGap1_1();
[PreserveSig]
int GetDefaultAudioEndpoint(int dataFlow, int role, out IMMDevice ppDevice);
}
[Guid("D666063F-1587-4E43-81F1-B948E807363F"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
private interface IMMDevice
{
[PreserveSig]
int Activate([MarshalAs(UnmanagedType.LPStruct)] Guid iid, int dwClsCtx, IntPtr pActivationParams, [MarshalAs(UnmanagedType.IUnknown)] out object ppInterface);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20066 次 |
最近记录: |