windows下修改系统音量
2016-07-26 10:30
239 查看
#include <windows.h> #include <mmdeviceapi.h> #include <endpointvolume.h> #include <audioclient.h> //参数: // -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(level<0 || level>100){ 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; }
相关文章推荐
- 如何重装TCP/IP协议
- Windows 8 官方高清壁纸欣赏与下载
- 谁是桌面王者?Win PK Linux三大镇山之宝
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows Clang开发环境备忘
- 从Windows系统下访问Linux分区相关软件
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows下搭建本地SVN服务器
- 使用Windows原生命令一键清空剪贴板
- windows用windeployqt发布qt quick application程序
- 利用开源软件打造自己的全功能远程工具
- Windows 8虚拟机不能全屏的解决方法
- 虚拟化基础架构Windows 2008篇之1-虚拟化基础服务概述
- 虚拟化基础架构Windows 2008篇之5-安装Windows部署服务
- 虚拟化基础架构Windows 2008篇之7-添加其他操作系统的安装镜像
- 虚拟化基础架构Windows 2008篇之9-配置Windows部署服务
- 虚拟化基础架构Windows 2008篇之12-WSUS工作站端配置
- Visual Studio 2012 示例代码浏览器 - 数以千计的开发示例近在手边,唾手可得