调节系统音量VC++(适合win和xp系统) 打开静音 增减和减小系统音量

这篇博客介绍了如何使用VC++编程控制Windows系统的音量,包括打开静音、增加音量和减少音量。针对XP系统和Win系统分别提供了不同的实现方式,涉及到的接口包括MMDeviceAPI和MMSYSTEM。程序中使用了CoInitialize、CoCreateInstance、IMMDeviceEnumerator、IAudioEndpointVolume等接口来实现音量的调节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <mmdeviceapi.h>
#include <endpointvolume.h>
#include <mmsystem.h>
#pragma comment(lib, "winmm.lib") 

 

以下程序为:如果系统处于静音状态 则打开系统音量:

//Windows 系统音量设置

 IMMDevice *device = NULL;

 HRESULT hr = CoInitialize(NULL);
 if (FAILED(hr))
 {
  return FALSE;
 }

 IMMDeviceEnumerator *deviceEnumerator = NULL;
 hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER,
  __uuidof(IMMDeviceEnumerator), (LPVOID *)&deviceEnumerator);

 if (FAILED(hr))
 {
  // xp 系统调节音量
  HMIXER hMixer;
  MIXERLINE mixerline;
  MIXERLINECONTROLS mlcs;
  MIXERCONTROL mc;
  MIXERCONTROLDETAILS_BOOLEAN mcdMute;
  MIXERCONTROLDETAILS mcd;
  LONG lvalue;
  try{
   if (MMSYSERR_NOERROR == mixerOpen(&hMixer, 0, 0, 0, 0))
   {
    RtlZeroMemory(&mixerline, sizeof(MIXERLINE));
    mixerline.cbStruct = sizeof(MIXERLINE);
    mixerline.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
    if (MMSYSERR_NOERROR == mixerGetLineInfo((HMIXEROBJ)hMixer, &mixerline, MIXER_GETLINEINFOF_COMPONENTTYPE))
    {
     RtlZeroMemory(&mlcs, sizeof(MIXERLINECONTROLS));
     mlcs.cbStruct = sizeof(MIXERLINECONTROLS);
     mlcs.dwLineID = mixerline.dwLineID;
     mlcs.dwControlType =  MIXERCONTROL_CONTROLTYPE_MUTE;
     mlcs.cControls = 1;
     mlcs.cbmxctrl = sizeof(MIXERCONTROL);
     mlcs.pamxctrl = & mc;
     if (MMSYSERR_NOERROR == mixerGetLineControls((HMIXEROBJ)hMixer, &mlcs, MIXER_GETLINECONTROLSF_ONEBYTYPE))
     {
      RtlZeroMemory(&mcd, sizeof(MIXERCONTROLDETAILS));
      mcd.cbStruct = sizeof(MIXERCONTROLDETAILS);
      mcd.dwControlID = mc.dwControlID;
      mcd.cChannels = 1;
      mcd.cbDetails = sizeof(MIXERCONTROLDETAILS_BOOLEAN);
      mcd.paDetails = &mcdMute;

      if (MMSYSERR_NOERROR == mixerGetControlDetails((HMIXEROBJ)hMixer, &mcd, MIXER_GETCONTROLDETAILSF_VALUE))
      {
       lvalue = mcdMute.fValue;
       if (lvalue != 0 )
       {
        RtlZeroMemory(&mcd, sizeof(MIXERCONTROLDETAILS));
        mcdMute.fValue = FALSE;       //静音设置,0非静音,1静音
        mcd.cbStruct = sizeof(MIXERCONTROLDETAILS);
        mcd.dwControlID = mc.dwControlID;
        mcd.cChannels = 1;
        mcd.cbDetails = sizeof(MIXERCONTROLDETAILS_BOOLEAN);
        mcd.paDetails = &mcdMute;
        mixerSetControlDetails((HMIXEROBJ)hMixer, &mcd, MIXER_SETCONTROLDETAILSF_VALUE);
       }
      }
     }
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值