解除win7系统静音
#ifdef SPEAKERDEVMUTECONTROL
# define SPEAKERDEVMUTECONTROL_EXPORT __declspec(dllexport)
#else
# define SPEAKERDEVMUTECONTROL_EXPORT __declspec(dllimport)
#endif
SPEAKERDEVMUTECONTROL_EXPORT bool setSpeakerDevName(const chConstStringA& strDevName);
SPEAKERDEVMUTECONTROL_EXPORT bool cancleSpeakerDevMute();
SPEAKERDEVMUTECONTROL_EXPORT bool returnSpeakerDevMute();
SPEAKERDEVMUTECONTROL_EXPORT int GetDevIDByName(chStringA strDevName);
SPEAKERDEVMUTECONTROL_EXPORT BOOL getSystemMuteStatusLaterWindowVista(BOOL& bMuted);
SPEAKERDEVMUTECONTROL_EXPORT BOOL setSystemMuteLaterWindowVista(BOOL bMuted = FALSE);
SPEAKERDEVMUTECONTROL_EXPORT BOOL setSystemMuteLaterWindowVistaByDevID(UINT devID, BOOL bMuted = FALSE);
SPEAKERDEVMUTECONTROL_EXPORT BOOL getSystemMuteStatusLaterWindowVistaByDevID(UINT devID, BOOL& bMuted);
//////////////////////
#include "../ETLLib/ETLLib.hpp"
#ifdef _WIN32_WINNT
#undef _WIN32_WINNT
#endif
#define _WIN32_WINNT 0x0600
#include <Windows.h>
#include <endpointvolume.h>
#include <mmdeviceapi.h>
#include <devicetopology.h>
#include <FunctionDiscoveryKeys_devpkey.h>
#include "SpeakerDevMuteControl.h"
#define SAFE_RELEASE(punk) \
if ((punk) != NULL) \
{ (punk)->Release(); (punk) = NULL; }
#define INIT_DEFAULT_IAUDIOENDPOINT \
CoInitialize(NULL);\
hr = S_OK;\
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator),\
NULL, CLSCTX_INPROC_SERVER, __uuidof(IMMDeviceEnumerator),(void**)&m_pEnumerator);\
if(SUCCEEDED(hr))\
{\
hr = m_pEnumerator->GetDefaultAudioEndpoint(eRender, eMultimedia, &m_pDevice);\
if (SUCCEEDED(hr))\
{\
hr = m_pDevice->Activate(__uuidof(IAudioEndpointVolume),\
CLSCTX_ALL, NULL, (void**)&m_pEndptVolCtrl);\
}\
}
#define INIT_IAUDIOENDPOINT_BYID(devID) \
CoInitialize(NULL);\
hr = S_OK;\
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator),\
NULL, CLSCTX_INPROC_SERVER, __uuidof(IMMDeviceEnumerator),(void**)&m_pEnumerator);\
if(SUCCEEDED(hr))\
{\
hr = m_pEnumerator->EnumAudioEndpoints(eAll, DEVICE_STATEMASK_ALL, &m_pCollection);\
if (SUCCEEDED(hr))\
{\
hr = m_pCollection->Item(devID, &m_pDevice);\
if (SUCCEEDED(hr))\
{\
hr = m_pDevice->Activate(__uuidof(IAudioEndpointVolume),\
CLSCTX_ALL, NULL, (void**)&m_pEndptVolCtrl);\
}\
}\
}
#define INIT_DEVICECOLLECTION \
CoInitialize(NULL);\
hr = S_OK;\
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator),\
NULL, CLSCTX_INPROC_SERVER, __uuidof(IMMDeviceEnumerator),(void**)&m_pEnumerator);\
if(SUCCEEDED(hr))\
{\
hr = m_pEnumerator->EnumAudioEndpoints(eAll, DEVICE_STATEMASK_ALL, &m_pCollection);\
}
#define UNINIT_IAUDIOENDPPINTVOLUME \
SAFE_RELEASE(m_pEndptVolCtrl);\
SAFE_RELEASE(m_pDevice);\
SAFE_RELEASE(m_pEnumerator);\
SAFE_RELEASE(m_pCollection);\
CoUninitialize();
int GetDevIDByName(chStringA strDevName)
{
if (strDevName.empty())
{
return -1;
}
chStringW strDevNameW = chUTF82W(strDevName);
IAudioEndpointVolume *m_pEndptVolCtrl = NULL;
IMMDevice *m_pDevice = NULL;
IMMDeviceCollection *m_pCollection = NULL;
IMMDeviceEnumerator *m_pEnumerator = NULL;
HRESULT hr = S_OK;
INIT_DEVICECOLLECTION;
if (SUCCEEDED(hr))
{
UINT nDevCounts = 0;
m_pCollection->GetCount(&nDevCounts);
for (int i = 0; i < (int)nDevCounts; i++)
{
hr = m_pCollection->Item(i, &m_pDevice);
DWORD state;
m_pDevice->GetState(&state);
if (state == DEVICE_STATE_NOTPRESENT )
{
continue;
}
IPropertyStore* pRopertyStore;
hr = m_pDevice->OpenPropertyStore(STGM_READ, &pRopertyStore);
if (SUCCEEDED(hr))
{
PROPVARIANT varName;
PropVariantInit(&varName);
hr = pRopertyStore->GetValue(PKEY_Device_FriendlyName, &varName);
typedef uCTextHelper<WCHAR, false> WCI;
if (WCI::strncmp(strDevNameW.c_ptr(), varName.pwszVal, strDevNameW.length()) == 0)
{
return i;
}
}
}
}
return -1;
}
BOOL setSystemMuteLaterWindowVista(BOOL bMuted /*= FALSE*/)
{
BOOL bReresult = FALSE;
IAudioEndpointVolume *m_pEndptVolCtrl = NULL;
IMMDevice *m_pDevice = NULL;
IMMDeviceCollection *m_pCollection = NULL;
IMMDeviceEnumerator *m_pEnumerator = NULL;
HRESULT hr = S_OK;
INIT_DEFAULT_IAUDIOENDPOINT;
if (SUCCEEDED(hr))
{
hr = m_pEndptVolCtrl->SetMute(bMuted, NULL);
if (SUCCEEDED(hr))
{
bReresult = TRUE;
}
}
UNINIT_IAUDIOENDPPINTVOLUME;
return bReresult;
}
BOOL getSystemMuteStatusLaterWindowVista(BOOL& bMuted)
{
BOOL bReresult = FALSE;
IAudioEndpointVolume *m_pEndptVolCtrl = NULL;
IMMDevice *m_pDevice = NULL;
IMMDeviceCollection *m_pCollection = NULL;
IMMDeviceEnumerator *m_pEnumerator = NULL;
HRESULT hr = S_OK;
INIT_DEFAULT_IAUDIOENDPOINT;
if (SUCCEEDED(hr))
{
hr = m_pEndptVolCtrl->GetMute(&bMuted);
if (SUCCEEDED(hr))
{
bReresult = TRUE;
}
}
UNINIT_IAUDIOENDPPINTVOLUME;
return bReresult;
}
BOOL setSystemMuteLaterWindowVistaByDevID(UINT devID, BOOL bMuted /*= FALSE*/)
{
if (devID == -1)
{
return setSystemMuteLaterWindowVista(bMuted);
}
BOOL bReresult = FALSE;
IMMDeviceCollection *m_pCollection = NULL;
IMMDevice *m_pDevice = NULL;
IAudioEndpointVolume *m_pEndptVolCtrl = NULL;
IMMDeviceEnumerator *m_pEnumerator = NULL;
HRESULT hr = S_OK;
INIT_IAUDIOENDPOINT_BYID(devID);
if (SUCCEEDED(hr))
{
hr = m_pEndptVolCtrl->SetMute(bMuted, NULL);
if (SUCCEEDED(hr))
{
bReresult = TRUE;
}
}
UNINIT_IAUDIOENDPPINTVOLUME;
return bReresult;
}
BOOL getSystemMuteStatusLaterWindowVistaByDevID(UINT devID, BOOL& bMuted)
{
if (devID == -1)
{
return getSystemMuteStatusLaterWindowVista(bMuted);
}
BOOL bReresult = FALSE;
IMMDevice *m_pDevice = NULL;
IMMDeviceCollection *m_pCollection = NULL;
IAudioEndpointVolume *m_pEndptVolCtrl = NULL;
IMMDeviceEnumerator *m_pEnumerator = NULL;
HRESULT hr = S_OK;
INIT_IAUDIOENDPOINT_BYID(devID);
if (SUCCEEDED(hr))
{
hr = m_pEndptVolCtrl->GetMute(&bMuted);
if (SUCCEEDED(hr))
{
bReresult = TRUE;
}
}
UNINIT_IAUDIOENDPPINTVOLUME;
return bReresult;
}
static chStringA s_strDevName;
static BOOL bMuted = FALSE;
static bool bCancelMuted = false;
bool setSpeakerDevName(const chConstStringA& strDevName)
{
if (strDevName != s_strDevName)
{
s_strDevName = strDevName;
return true;
}
return false;
}
bool cancleSpeakerDevMute()
{
if (s_strDevName.empty())
{
return false;
}
bCancelMuted = true;
UINT iDevID = GetDevIDByName(s_strDevName);
getSystemMuteStatusLaterWindowVistaByDevID(iDevID, bMuted);
setSystemMuteLaterWindowVistaByDevID(iDevID, FALSE);
}
bool returnSpeakerDevMute()
{
if (s_strDevName.empty() || !bCancelMuted)
{
return false;
}
bCancelMuted = false;
UINT iDevID = GetDevIDByName(s_strDevName);
setSystemMuteLaterWindowVistaByDevID(iDevID, bMuted);
}
解除win7系统静音的更多相关文章
- win7系统VPN设置
为了解除公司上网策略限制,或者为了上Google,Facebook,都可以通过设置VPN实现. 要使用VPN需要到VPN服务商注册,链接VPN服务商. ======================== ...
- 解除win7网络限速.
在电脑刚买或者系统重装了的时候,win7系统会默认限制20%的网络速度,限制了我们的上网速度,我们可以解决这个限制,让上网变得更快 下面是操作步骤 1.开始>运行 2.输入以下命令,然后确定 g ...
- 最新win7系统64位和32位系统Ghost装机稳定版下载
系统来自转载:系统妈 一.主要更新:========================== * 更新了系统补丁和Office2007 SP2所有补丁 通过微软漏洞扫描* 更新QQ至7.1 官方正式版* ...
- win7系统下python安装numpy,matplotlib,scipy和scikit-learn
1.安装numpy,matplotlib,scipy和scikit-learn win7系统下直接采用pip或者下载源文件进行安装numpy,matplotlib,scipy时会遇到各种问题,这是因为 ...
- win7系统网卡驱动正常,网线连接设备正常,但电脑右下角网络图片显示一直在转圈或者显示一个黄色感叹号的解决办法
今天遇到一个问题是电脑的win7系统一直都可以连接有线,但今天突然连接不了.在我的电脑右键-->管理--->设备管理器-->网络适配器,里面查看了网络适配器安装正常.但是电脑右下角的 ...
- Win8换成Win7系统问题小结(修改主板BIOS方法)
问题描述: 笔记本电脑W8系统使用不习惯,想要换成W7系统,但不管是用光盘安装亦或是用U盘安装,在设置系统启动项的时候,选择从光盘启动或从U盘启动,但是回车点了之后没反应. 下面就说说问题的原因及解决 ...
- win7系统下如何配置php-Apache-mysql环境
如何在win7系统下配置php环境呢,php+Apache+mysql都是在配置过程中必不可少的元素,php负责解析php代码,apache负责服务器端而mysql是数据交互的中转站. 那么如何将ph ...
- 深度技术GHOST WIN7系统32.64位j极速安装版 V2016年
系统来自系统妈:http://www.xitongma.com 深度技术GHOST win7系统64位j极速安装版 V2016年3月 系统概述 深度技术ghost win7系统64位j极速安装版 版 ...
- win7系统中如何使文件显示出扩展名
win7系统中如何使文件显示出扩展名-------------------- 1.点击计算机-->>点击组织,然后选择"文件夹及搜索选项"-->> ---- ...
随机推荐
- Apache Shiro系列教程之二:十分钟上手Shiro
在本教程中,我们会写一个简单的.仅仅输出一些内容命令行程序,从而对Shiro有一个大体的感觉. 一.准备工作 本教程需要Java1.5+,并且我们用Maven生成项目,当然Maven不是必须的,你也可 ...
- windows下PHP批量生成打包android程序APK-渠道txt植入apk文件
服务器安装php环境 下载 android-sdk-windows 下载JDK 1.打开zip支持 c:/windows/php.ini ,打开 exec 2.apk 支持mime添加 .apk a ...
- (转)创建Graphics的三种方法
方法一.利用控件或窗体的Paint事件中的PainEventArgs 在窗体或控件的Paint事件中接收对图形对象的引用,作为PaintEventArgs(PaintEventArgs指定绘制控件所用 ...
- OFBIZ:启动之StartupLoader
任意一个JAVA程序都是从main()开始启动的,OFBIZ也不例外.OFBIZ的main()位于framework/start/src/org/ofbiz/base/start/Start.java ...
- metasploit升级(BT5)
1.apt-get update 2.apt-get install metasploit 3.修改文件:/opt/metasploit/ruby/lib/ruby/1.9.1/i686-linux/ ...
- EntityFramework+WCF
首先需要在服务对象实例上面添加数据契约[DataContract]和 [DataMember],当然直接在类中修改也可以,但是对于tt模板来说一旦保存以后数据就会重新生成, 所以得在tt模板中修改 ...
- Android新浪微博获取评论信息、发表评论、转发微博等
首先前面一节中说过,获取用户的微博信息,这里简单介绍下获取微博的评论信息,以及对微博进行评论,转发微博等. OAuth认证,这里就不多说了, 我说名一下接口: 获取微博的评论列表接口: http:// ...
- MessageFormat不支持{
转自 :http://zqc-0101.iteye.com/blog/1140140 MessageFormat用来格式化一个消息,通常是一个字符串,比如: String str = "I' ...
- 【EF学习笔记11】----------查询中常用的扩展方法
先来看一下我们的表结构: 首先毫无疑问的要创建我们的上下文对象: using (var db = new Entities()) { //执行操作 } Average 平均值: //查询平均分 Con ...
- MVC 下拉單數據內容綁定
#region /// <summary>授權範圍自建列表</summary> /// <returns></returns> ...