一、获取设备音量

不同系统获取音量的方法是有差别的,比如vista和win7获取音量的方式就是不同的,因此,我们应该首先获取系统的信息,然后根据系统信息,用其对应的方法获取音量。

1、OSVERSIONINFO

系统信息结构体

以下结构体均用于检索或设置系统信息。

ANIMATIONINFO
HW_PROFILE_INFO
MINIMIZEDMETRICS
NONCLIENTMETRICS
OSVERSIONINFO
SYSTEM_INFO 

使用说明
       在OSVERSIONINFO数据结构中包含操作系统版本信息。这些信息包括主要和次要版本号,一个内部版本号,一个平台标识符,以及操作系统的说明性文本。GetVersionEx函数将使用这个结构体。
 
结构体原型:

typedef struct _OSVERSIONINFO
{
    DWORD dwOSVersionInfoSize;
    DWORD dwMajorVersion;
    DWORD dwMinorVersion;
    DWORD dwBuildNumber;
    DWORD dwPlatformId;
    TCHAR szCSDVersion[ 128 ];
} OSVERSIONINFO;
 

成员说明:
1)dwOSVersionInfoSize
       以字节为单位,指定这个数据结构的大小。须在调用GetVersionEx(OSVERSIONINFO)函数之前,将这个成员设置为sizeof(OSVERSIONINFO)。
2)dwMajorVersion
       标识操作系统的主版本号。例如,对于Windows NT 3.51版,其主版本号为3;对于Windows NT 4.0版,其主版本号为4。
3)dwMinorVersion
       标识操作系统的次要版本号。例如,对于Windows NT 3.51版,其次要版本号为51;对于Windows NT 4.0版本,其次要版本号为0。
4)dwBuildNumber
       Windows NT:标识操作系统的内部版本号。
Windows 95:低位字标识操作系统数的内部版本号。高位字包含了主要和次要版本号。
5)dwPlatformId
       标识操作系统平台。这个成员可以是下列值之一:
6)szCSDVersion
       Windows NT:包含一个以NULL结尾的字符串,如“Service Pack 3”,就表明系统上安装了最新的Service Pack。如果没有安装Service Pack,该字符串为空。
     Windows 95:包含一个以NULL结尾的字符串,提供了对操作系统的任意补充信息。


应用:

OSVERSIONINFO osVer;
	osVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
	::GetVersionEx( &osVer );
	if( osVer.dwMajorVersion==6 )
	{
        GetAudioOuputVolum_Vita();
    }
    else
    {
        GetAudioOuputVolum_Win7();
    }

2、vista下获取设备音量

int GetAudioOutputVolumn_Vista(const std::string &deviceName)
{
    IMMDeviceEnumerator* pEnumerator;
    IMMDeviceCollection* pCollection = NULL;
    IMMDevice *pDevice = NULL;
    IPropertyStore *pProperties=NULL;  
    IAudioEndpointVolume *pVolumeAPI=NULL;  
    UINT deviceCount = 0;

    float fVolume = -1;

    CoInitializeEx( NULL , COINIT_MULT