VC++打开或关闭目标进程的声音(扬声器)(附源码)
VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)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;
}
相关文章:
VC++打开或关闭目标进程的声音(扬声器)(附源码)
VC常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/124272585C软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...&a…...
LeetCode 每日一题 2023/1/23-2023/1/29
记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录1/23 2303. 计算应缴税款总额1/24 1828. 统计一个圆中点的数目1/25 1632. 矩阵转换后的秩1/26 1663. 具有给定数值的最小字符串1/27 2309. 兼具大小写的最好英文字母1/28 16…...
Hadoop组件Yarn常见命令
Hadoop组件Yarn常见命令 一、概述 当我们不能使用ResourceManager Web UI时,就需要使用Yarn命令来处理问题。因此,我们需要了解如何使用yarn命令监控YARN集群。 Hadoop的yarn命令具有广泛的使用范围: 它可以帮助我们管理大量的MR、Spark、Flink任务。例如获取和杀死正在运…...
QT之事件系统
QT之事件系统1. 概述2. 事件的传递3. 事件类型4. 事件处理与事件过滤5. 自定义事件5.1 Demo6. 发送事件7. 参考1. 概述 在QT中,事件均派生自QEvent抽象类,事件可以由任何派生自QObject的子类实例接收和处理。它们与widget关联性极强。 2. 事件的传递 …...
Python中__init__.py文件深入理解
Python中文件__init__.py深入理解1. 简介1.1 模块(Module)和包(Package)的概念1.2 __init__.py文件简介2. __init__.py内容写法2.1 __init__.py文件内容2.2 __init__.py内容解释1. 简介 1.1 模块(Module)和…...
Jmeter之实现参数化的不同方式详解
参数化简介 定义:动态的获取、设置或生成数据,是一种由程序驱动代替人工驱动的数据设计方案,提高脚本的编写效率以及编写质量 适用场景:当提交的数据量较大时,每次修改太麻烦,可以使用参数化 本文介绍实现…...
Matlab论文插图绘制模板第76期—半对数刻度折线图(Semilogx和Semilogy)
在之前的文章中,分享了Matlab双对数刻度折线图的绘制模板: 进一步,再来分享一下半对数刻度折线图的绘制模板。 先来看一下成品效果: 特别提示:Matlab论文插图绘制模板系列,旨在降低大家使用Matlab进行科研…...
【找工作】永善县政务服务管理局公开招聘5名公益性岗位人员
【找工作】永善县政务服务管理局公开招聘5名公益性岗位人员 为贯彻落实《中华人民共和国就业促进法》《就业服务和就业管理规定》,帮助有劳动能力和就业愿望的就业困难人员实现就业,永善县政务服务管理局拟向社会公开招聘公益性岗位人员5名,…...
【C++】从0到1入门C++编程学习笔记 - 提高编程篇:STL常用算法(拷贝和替换算法)
文章目录一、copy二、replace三、replace_if四、swap学习目标: 掌握常用的拷贝和替换算法 算法简介: copy // 容器内指定范围的元素拷贝到另一容器中replace // 将容器内指定范围的旧元素修改为新元素replace_if // 容器内指定范围满足条件的元素替换…...
C语言程序环境剖析——探究从.c到.exe之路
程序环境1.程序的翻译环境和执行环境2. 详解编译 链接2.1 翻译环境2.2 编译的三部分预编译编译汇编2.3链接3.运行环境1.程序的翻译环境和执行环境 在ANSI C的任何一种实现中,都存在两个不同的环境。 翻译环境,在这个环境中源代码被转换成可执行的机器指…...
【软件测试】8年资深测试总结出的测试学习经验,从入门到测试开发......
目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 测试圈子里有一句话…...
【博学谷学习记录】超强总结,用心分享|Spark的RDD算子分类
概念 RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,代表一个不可变、可分区、里面的元素可并行计算的集合,它是一种抽象的数据模型,本身并不存储数据,仅…...
云原生系列之使用 prometheus监控远程主机实战
文章目录前言一. 实验环境二. 安装node_exporter2.1 node_exporter的介绍2.2 node_exporter的安装三. 在prometheus服务端配置监控远程主机3.1 在server端配置拉取node的信息3.2 重启prometheus3.3 通过浏览器查看prometheus总结前言 大家好,又见面了,我…...
2023年地方两会政府工作报告汇总(各省市23年重点工作)
新年伊始,全国各地两会密集召开,各省、市、自治区2023年政府工作报告相继出炉,各地经济增长预期目标均已明确。相较于2022年,多地经济增长目标放缓,经济不断向“高质量”发展优化转型。今年是二十大后的开局之年&#…...
第一章 企业管理概论
目录 一、企业及其形式 二、企业管理概述 三、企业管理理论与实践的产生与发展 四、网络时代的企业环境 五、网络时代企业管理的变革 一、企业及其形式 1、企业的概念 企业以市场为导向,以价值增值作为经济活动的目的; 企业是从事商品生产和流通的…...
独立图片服务器有什么突出之处
服务器是网络中非常重要的设施,承载着不同流量的访问,这就要求服务器具有快速的吞吐量、高稳定性和高可靠性。独立图片服务器作为独立服务器的衍生品,在数据利用方面的应用可以为企业在数据处理和分析方面带来一场革命。本文就将介绍独立图片…...
Linux驱动开发基础__mmap
目录 1 引入 2 内存映射现象与数据结构 3 ARM 架构内存映射简介 3.1 一级页表映射过程 3.2 二级页表映射过程 4 怎么给 APP 新建一块内存映射 4.1 mmap 调用过程 编辑4.2 cache 和 buffer 4.3 驱动程序要做的事 5 编程 5.1 app编程 5.2 hello_drv_test…...
若依框架---为什么把添加和更新分成两个接口
👏作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者 📕系列专栏:前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶 Ǵ…...
图论算法:Floyd算法
文章目录Floyd算法例题:灾后重建Floyd算法 Floyd算法用于求图中任意两点之间的最短路径,该算法主要运用了动态规划的思想。 思考: 给你几个点与边,可以组成一张图,那么如何求得任意两点之间的最短路径呢?…...
回顾 | .NET MAUI 跨平台应用开发 - 用 .NET MAUI 开发一个无人机应用(下)
点击蓝字关注我们编辑:Alan Wang排版:Rani Sun微软 Reactor 为帮助广开发者,技术爱好者,更好的学习 .NET Core, C#, Python,数据科学,机器学习,AI,区块链, IoT 等技术,将…...
部署有多个仓库的svn服务
centos7自带svn服务,现需要创建多个仓库,并实现用户读写功能 创建svn版本库 mkdir /home/svn mkdir /home/svn/confmkdir /home/svn/yk1 mkdir /home/svn/yk2 svnadmin create /home/svn/yk1 svnadmin create /home/svn/yk2 进入版本库yk1的配置文件路…...
Mapper文件注入问题
Mapper文件注入问题UserMapper that could not be found.原因分析解决方案程序正常运行,但是注入类爆红问题原因分析解决方法UserMapper’ that could not be found. 原因分析 撰写了mapper文件,但是没有注入spring容器 解决方案 添加mybatis.mapper-…...
基于微信小程序的国产动漫论坛小程序
文末联系获取源码 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏览器…...
常用限流算法
简单时间窗口 算法逻辑:设置周期时间内的最大并发量问题:在周期尾端进去阈值并发后,进入下一周期时,又进入阈值并发量,则会出现瞬时并发量是阈值的2倍。 滑动时间窗口(优化) 算法逻辑…...
前端面经详解
目录 css 盒子充满屏幕 A.给div设置定位 B.设置html,body的宽高 C.相对当前屏幕高度(强烈推荐) 三列布局:左右固定,中间自适应 flex布局(强烈推荐) grid布局 magin负值法 自身浮动 绝对定位 圣…...
网页CAD开发快速入门
演示说明 提示:目前提供两种在网页中浏览编辑CAD图纸方案,详细说明见:MxDraw帮助 网页中打开CAD最简步骤: 第一步: 安装插件运行环境,下载安装(可能需要退杀毒软件):https://demo.mxdraw3d.com:3562/MxDrawx86Setup…...
C#开发的OpenRA的mod.yaml文件
C#开发的OpenRA的mod.yaml文件 在OpenRA游戏里,会看到这样一段代码: Manifest LoadMod(string id, string path){IReadOnlyPackage package = null;try{if (!Directory.Exists(path)){Log.Write("debug", path + " is not a valid mod package");return …...
【ESP32+freeRTOS学习笔记-(七)中断管理】
目录1、概述2、在ISR中使用FreeRTOS中专用的API2.1 独立的用于ISR中的API2.2 关于xHigherPriorityTaskWoken 参数的初步理解3、延迟中断处理的方法-将中断中的处理推迟到任务中去4 方法一:用二进制信号量来同步ISR与”延时处理的任务“4.1 二进制信号量4.2 函数用法…...
【总结】1591- 从入门到精通:使用 TypeScript 开发超强的 CLI 工具
作为一名开发者,掌握 CLI 工具的开发能力是非常重要的。本文将指导你如何使用 TypeScript 和 CAC 库开发出功能强大的 CLI 工具。快速入门首先,需要先安装 Node.js 和 npm(Node Package Manager),然后在项目目录中创建…...
【Java】int和Integer的区别?为什么有包装类?
int和Integer的区别?为什么有包装类? java是一种强类型的语言,所以所有的属性都必须要有一个数据类型。 PS:java10有了局部变量类型推导,可以使用var来代替某个具体的数据类型,但是在字节码阶段࿰…...
一般做网站多少钱/菏泽百度推广公司电话
在工程勘察设计企业高质量发展的大背景下,对人才的要求越来越高,很多企业希望通过传统的培训有效提升员工能力,实际上往往收效甚微。笔者认为一场有效的培训必须基于人员与岗位的匹配度,而匹配度确定的一个基础工作是岗位胜任力。…...
北京市建设工程质监站网站/国家卫健委每日疫情报告
Ubuntu去掉命令行前用户名和主机名方法$ vi ~/.bashrc按a或i进入编辑模式PS1${debian_chroot:(debian_chroot)}\w\$ 默认为PS1${debian_chroot:(debian_chroot)}\u\h:\w\$ 注:u为username,h为hostname按Esc键退出编辑模式:wq (保存并退出)$ source ~/.…...
网站建设之网页制作语言基础/广州搜索排名优化
【4个数组同时写到数据库怎么写?】$_POST[a] 值为1,2,3,4,5$_POST[b] 值为a,b,c,d,e$_POST[c] 值为男,女,女,男,男$_POST[d] 值为25,26,27,26,26这四个数组同时是从里接收过来的。现在我要把它们都写入到数据库里,循环应该怎么写?最后写到数据…...
如何租用服务器做网站/长安seo排名优化培训
MPI简介在程序中,不同的进程需要相互的数据交换,特别是在科学计算中,需要大规模的计算与数据交换,集群可以很好解决单节点计算力不足的问题,但在集群中大规模的数据交换是很耗费时间的,因此需要一种在多节点…...
WordPress发不出注册邮箱/seo入门教程seo入门
9个最经典的职场小 有一次,一个老强盗带着徒弟去银行,被警方追捕。两人狂逃,差点儿连裤子都跑掉了。好不容易甩掉了警察,两人上气不接下气,瘫倒在地上。 良久,惊魂稍定,徒弟说:“师父啊师父&am…...
网站平台怎么做的好处/营销策划公司靠谱吗
BAD_ACCESS 在什么情况下出现 BAD_ACCESS 报错属于内存访问错误,会导致程序崩溃,错误的原因是访问了野指针(悬挂指针)。野指针指的是本来指针指向的对象已经释放了,但指向该对象的指针没有置 nil,指针指向随机的未知的内存&#…...