建设网络道德教育网站的有效措施,天元建设集团有限公司单位代码,清远公司网站建设,域名ip查询入口官网VC常用功能开发汇总#xff08;专栏文章列表#xff0c;欢迎订阅#xff0c;持续更新...#xff09;https://blog.csdn.net/chenlycly/article/details/124272585C软件异常排查从入门到精通系列教程#xff08;专栏文章列表#xff0c;欢迎订阅#xff0c;持续更新...常用功能开发汇总专栏文章列表欢迎订阅持续更新...https://blog.csdn.net/chenlycly/article/details/124272585C软件异常排查从入门到精通系列教程专栏文章列表欢迎订阅持续更新...https://blog.csdn.net/chenlycly/article/details/125529931 本文讲述如何将某个进程的声音扬声器打开或关闭掉这个功能在某些场合下可能会用到在此给大家做个分享。
1、在系统设置页面中将进程的扬声器打开或关闭 以Win10系统为例在系统桌面的右下角托盘图标区域中找到系统音量图标右键点击该图标弹出如下的右键菜单 点击“打开音量合成器”菜单项打开使用扬声器的进程列表页面如下所示 以操作企业微信进程为例点击下面的声音图标即可将企业微信进程的扬声器关闭或打开。如果将企业微信进程的扬声器关闭则听不到企业微信进程的所有声音。
2、通过代码实现进程扬声器打开或关闭 Windows系统支持以COM组件的方式访问系统中的音视频设备我们可以先获取所有的音频播放设备然后遍历设备下对应的进程列表然后通过进程id去遍历进程列表找到目标进程后对进程的扬声器进行关闭和打开操作。 以开关本进程的扬声器为例完整的实现代码如下
BOOL SetCurrentSpeakerMute(BOOL bQuiet)
{HRESULT hr S_OK;IMMDeviceCollection *pMultiDevice NULL;IMMDevice *pDevice NULL;IAudioSessionEnumerator *pSessionEnum NULL;IAudioSessionManager2 *pASManager NULL;IMMDeviceEnumerator *pEnumerator NULL;const IID IID_ISimpleAudioVolume __uuidof(ISimpleAudioVolume);const IID IID_IAudioSessionControl2 __uuidof(IAudioSessionControl2);CoInitialize(NULL);// Get enumerator for audio endpoint devices.hr CoCreateInstance(__uuidof(MMDeviceEnumerator),NULL, CLSCTX_ALL,__uuidof(IMMDeviceEnumerator),(void**)pEnumerator);if (FAILED(hr))return FALSE;// 1、获取音频播放设备hr pEnumerator-EnumAudioEndpoints(eRender, DEVICE_STATE_ACTIVE, pMultiDevice);if (FAILED(hr))return FALSE;UINT deviceCount 0;hr pMultiDevice-GetCount(deviceCount);if (FAILED(hr))return FALSE;// 2、遍历音频播放设备for (UINT ii 0; ii deviceCount; ii){pDevice NULL;hr pMultiDevice-Item(ii, pDevice);if (FAILED(hr))return FALSE;hr pDevice-Activate(__uuidof(IAudioSessionManager), CLSCTX_ALL, NULL, (void**)pASManager);if (FAILED(hr))return FALSE;hr pASManager-GetSessionEnumerator(pSessionEnum);if (FAILED(hr))return FALSE;int nCount;hr pSessionEnum-GetCount(nCount);for (int i 0; i nCount; i){IAudioSessionControl *pSessionCtrl;hr pSessionEnum-GetSession(i, pSessionCtrl);if (FAILED(hr))continue;// 3、获取音频播放控制对象IAudioSessionControl2 *pSessionCtrl2;hr pSessionCtrl-QueryInterface(IID_IAudioSessionControl2, (void **)pSessionCtrl2);if (FAILED(hr))continue;ULONG pid;hr pSessionCtrl2-GetProcessId(pid);if (FAILED(hr))continue;ISimpleAudioVolume *pSimplevol;hr pSessionCtrl2-QueryInterface(IID_ISimpleAudioVolume, (void **)pSimplevol);if (FAILED(hr))continue;// 4、对比获取音频播放控制对象的进程id判断是不是本进程的if (pid GetCurrentProcessId()){// 将目标进程静音pSimplevol-SetMute(bQuiet, GUID_NULL);}if (pSimplevol ! NULL){pSimplevol-Release();}if (pSessionCtrl2 ! NULL){pSessionCtrl2-Release();}if (pSessionCtrl ! NULL){pSessionCtrl-Release();}}}if (pSessionEnum ! NULL) pSessionEnum-Release();if (pASManager ! NULL) pASManager-Release();if (pDevice ! NULL) pDevice-Release();if (pMultiDevice ! NULL) pMultiDevice-Release();if (pEnumerator ! NULL) pEnumerator-Release();CoUninitialize();return TRUE;
}