Win7系统下C++实现客户端程序单独静音功能
2012-10-09 17:03
483 查看
本文主要是作为学习笔记而编写的,同时也希望能帮助需要的人!!
实现这个功能是为了解决公司浏览器中Win7下不能静音的BUG。搜索了很多网页,都没有找到这方面的实现!但我心里很清楚,一定是有方法解决这个问题的。所以,在心情还算良好的情况下,静下心来查看MSDN的英文介绍,果然让我找到了这个!Core Audio API——Win7系统以后才有的。而该库的相关中文介绍,可以参考以下文章:
1. http://caicaioffice.blog.163.com/blog/static/1417910220094154269427/
2.http://caicaioffice.blog.163.com/blog/static/14179102200941542637752/
通过看上面的文章,虽然能够实现设备音量的控制,但貌似还是木有针对一个程序来控制其静音,所以,只能靠MSDN帮忙了!
要实现客户端程序真正的单独静音,我们必须考虑以下两点:
1. 从客户端程序设置单独静音
提到客户端程序音量控制,首先就需要获取程序IAudioSessionManager会话(Session)。然后再通过调用会话对应的ISimpleAudioVolume中的SetMute函数,就可以设置客户端程序是否静音了。整个代码都先给出:
在TxMuted.h文件中的代码:
View Code
好啦!以上代码为本人亲测后的代码,可以使用的!如果有什么问题,欢迎来指出~~ 请勿拍砖!!
实现这个功能是为了解决公司浏览器中Win7下不能静音的BUG。搜索了很多网页,都没有找到这方面的实现!但我心里很清楚,一定是有方法解决这个问题的。所以,在心情还算良好的情况下,静下心来查看MSDN的英文介绍,果然让我找到了这个!Core Audio API——Win7系统以后才有的。而该库的相关中文介绍,可以参考以下文章:
1. http://caicaioffice.blog.163.com/blog/static/1417910220094154269427/
2.http://caicaioffice.blog.163.com/blog/static/14179102200941542637752/
通过看上面的文章,虽然能够实现设备音量的控制,但貌似还是木有针对一个程序来控制其静音,所以,只能靠MSDN帮忙了!
要实现客户端程序真正的单独静音,我们必须考虑以下两点:
1. 从客户端程序设置单独静音
提到客户端程序音量控制,首先就需要获取程序IAudioSessionManager会话(Session)。然后再通过调用会话对应的ISimpleAudioVolume中的SetMute函数,就可以设置客户端程序是否静音了。整个代码都先给出:
在TxMuted.h文件中的代码:
View Code
#include "stdafx.h" #include "MutedSessionEvent.h" extern volatile bool g_bMuted; CMutedSessionEvents::CMutedSessionEvents(IAudioSessionManager* pAudioSessionManager) { m_AudioSessionManager = pAudioSessionManager; _cRef = 1; } ULONG STDMETHODCALLTYPE CMutedSessionEvents::Release() { ULONG ulRef = InterlockedDecrement(&_cRef); if (0 == ulRef) { delete this; } return ulRef; } HRESULT STDMETHODCALLTYPE CMutedSessionEvents::QueryInterface( REFIID riid, VOID **ppvInterface) { if (IID_IUnknown == riid) { AddRef(); *ppvInterface = (IUnknown*)this; } else if (__uuidof(IAudioSessionEvents) == riid) { AddRef(); *ppvInterface = (IAudioSessionEvents*)this; } else { *ppvInterface = NULL; return E_NOINTERFACE; } return S_OK; } HRESULT STDMETHODCALLTYPE CMutedSessionEvents::OnSimpleVolumeChanged( float NewVolume, BOOL NewMute, LPCGUID EventContext) { // 防止其它程序对静音篡改 if ((BOOL)g_bMuted != NewMute) { TxSetMuted(g_bMuted); } return S_OK; } bool CMutedSessionEvents::TxSetMuted(bool bMuted) { HRESULT hr = S_FALSE; // 获得音量、静音控制接口 ISimpleAudioVolume *pAudioVolume = NULL; hr = m_AudioSessionManager->GetSimpleAudioVolume(NULL,0,&pAudioVolume); if (FAILED(hr)) return false; if(SUCCEEDED(hr)) { pAudioVolume->SetMute(bMuted, &GUID_NULL); // 更改全局静音状态 g_bMuted = bMuted; } if (pAudioVolume != NULL) { pAudioVolume->Release(); pAudioVolume = NULL; } return true; }
好啦!以上代码为本人亲测后的代码,可以使用的!如果有什么问题,欢迎来指出~~ 请勿拍砖!!
相关文章推荐
- c/c++实现将cef的一堆dll单独放在一个文件夹,与程序exe目录区分开
- C++控制台程序实现暂停功能
- php调用c++程序实现php功能扩展
- 让C++控制台程序停下来,实现暂停功能
- Cocos2d-JS 贝塞尔曲线根据时间设定即时坐标位置 C++到JS 绑定实现(联网游戏客户端Bezier同步功能实现)
- linux C++ poll实现的聊天室程序 客户端----服务端
- Java, C++同时实现SocketServer功能 程序比较
- C++程序学习之实现手机通讯录功能模拟
- 让C++控制台程序停下来,实现暂停功能
- c++服务器与android客户端进行文件传输功能的实现
- c++服务器与android客户端进行文件传输功能的实现
- Java, C++同时实现SocketClient功能 程序比较
- java在线聊天项目1.1版 ——开启多个客户端,分别实现注册和登录功能,使用客户端与服务端信息request机制,重构线程,将单独的登录和注册线程合并
- 在C++下实现的程序拨号代码
- 使用蜘蛛程序来实现电影资料库中的自动填写功能
- 使用 Socket 通信实现 FTP 客户端程序
- 微信小程序实现添加手机联系人功能示例
- 微信小程序 转发功能的实现
- android中cordova实现再次点击退出程序功能
- C#客户端程序调用外部程序的3种实现方法