设为首页 收藏本站
查看: 800|回复: 0

编程调节Win7/Win8系统音量的一种方法

[复制链接]

尚未签到

发表于 2015-5-15 09:12:25 | 显示全部楼层 |阅读模式
  不得不说, 自Win7(好像是吧), Windows的音量调节功能比以前更人性化了....
     但编程接口却变得更加复杂了............. 还要用到IAudioEndpointVolume………….   
     下面的代码是我整理的, 经测试可用, 嫌麻烦的可以直接拿来用, 接口很简单, 因而只能整个系统的音量...   



#include  
#include  
#include
#include

//参数:
//    -2 恢复静音
//    -1 静音
//    0~100:音量比例
bool SetVolumeLevel(int level)
{
HRESULT hr;
IMMDeviceEnumerator* pDeviceEnumerator=0;
IMMDevice* pDevice=0;
IAudioEndpointVolume* pAudioEndpointVolume=0;
IAudioClient* pAudioClient=0;
try{
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator),NULL,CLSCTX_ALL,__uuidof(IMMDeviceEnumerator),(void**)&pDeviceEnumerator);
if(FAILED(hr)) throw "CoCreateInstance";
hr = pDeviceEnumerator->GetDefaultAudioEndpoint(eRender,eMultimedia,&pDevice);
if(FAILED(hr)) throw "GetDefaultAudioEndpoint";
hr = pDevice->Activate(__uuidof(IAudioEndpointVolume),CLSCTX_ALL,NULL,(void**)&pAudioEndpointVolume);
if(FAILED(hr)) throw "pDevice->Active";
hr = pDevice->Activate(__uuidof(IAudioClient),CLSCTX_ALL,NULL,(void**)&pAudioClient);
if(FAILED(hr)) throw "pDevice->Active";
if(level==-2){
hr = pAudioEndpointVolume->SetMute(FALSE,NULL);
if(FAILED(hr)) throw "SetMute";
}else if(level==-1){
hr = pAudioEndpointVolume->SetMute(TRUE,NULL);
if(FAILED(hr)) throw "SetMute";
}else{
if(level100){
hr = E_INVALIDARG;
throw "Invalid Arg";
}
float fVolume;
fVolume = level/100.0f;
hr = pAudioEndpointVolume->SetMasterVolumeLevelScalar(fVolume,&GUID_NULL);
if(FAILED(hr)) throw "SetMasterVolumeLevelScalar";
pAudioClient->Release();
pAudioEndpointVolume->Release();
pDevice->Release();
pDeviceEnumerator->Release();
return true;
}
}
catch(...){
if(pAudioClient) pAudioClient->Release();
if(pAudioEndpointVolume) pAudioEndpointVolume->Release();
if(pDevice) pDevice->Release();
if(pDeviceEnumerator) pDeviceEnumerator->Release();
throw;
}
return false;
}

int main()
{
CoInitialize(0);
try{
//3秒后静音
Sleep(3000);
SetVolumeLevel(-1);
//3秒后恢复静音
Sleep(3000);
SetVolumeLevel(-2);
//调节音量
Sleep(3000);
SetVolumeLevel(10);
Sleep(3000);
SetVolumeLevel(30);
Sleep(3000);
SetVolumeLevel(20);
}
catch(...){
//错误处理...
    }
CoUninitialize();
return 0;
}
  
  下载:http://share.weiyun.com/19003dc8fd0804aaf1fc03b2430e832e
  参考:
              IAudioEndpointVolume interface
              Win7/Vista Audio API Master Volume Control
               
  女孩不哭 @ iyunv.com/memset @ 2014-04-07

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-67083-1-1.html 上篇帖子: Adobe Photoshop CS5 破解版共享(支持64位Win7) 下篇帖子: win7下搭建PHP环境
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表