Windows下如何禁用音频设备

雲天之巔 2017-09-01 09:07:51


类似上图效果,实现禁用某个音频设备的操作。
应该使用哪个API函数,求大神指导。。。
...全文
1033 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
雲天之巔 2017-09-04
  • 打赏
  • 举报
回复
引用 1 楼 sailing0123 的回复:
搜索windows API,再在Qt中调用,包含相应头文件
搜得到就不会来问了。。。。 windows似乎没有提供这种API,但是肯定有方法可以实现,因为有的软件可以做到。 然而我没有任何思路才来问的
雲天之巔 2017-09-04
  • 打赏
  • 举报
回复
引用 3 楼 n7zj0x8 的回复:
从设备管理器里面禁用 是使用"MMDEVAPI\\AudioEndpoints" 如果是禁用物理设备,就是在设备管理器里面, 彻底消失. 是使用硬件id"HDAUDIO\FUNC_01&VEN_10EC&DEV_0892&SUBSYS_xxxxxx" 大概伪代码如下.

 HDEVINFO hDevInfo=SetupDiGetClassDevs(NULL, NULL, NULL, DIGCF_ALLCLASSES|DIGCF_DEVICEINTERFACE);
 
  SP_DEVINFO_DATA spDevInfoData ;
  spDevInfoData.cbSize=sizeof(SP_DEVINFO_DATA);
  //枚举硬件
    for(int i=0; SetupDiEnumDeviceInfo(hDevInfo, i, &spDevInfoData); i++)
    {
       //获取属性
        while(!SetupDiGetDeviceRegistryProperty(...)
       {
          ...
       }
       //比较声音设备的id信息
       ...
       
        ...
            //禁用
            SetupDiSetClassInstallParams...
            SetupDiCallClassInstaller...
   }
至于托盘图标里面的那个,禁用,既不是物理设备,也不是驱动. 具体是什么我也不太清楚. 从我的分析上来看应该是一个未公开的接口. 我查询了一个,这个接口并没有公开, 或许mmsys.cpl存在参数可以达到效果,但是仍然没有说明文档,所以很遗憾,你需要自己研究. 你可以使用api Monitor 这个软件监控,但是由于是使用的com组件访问,所以并没有太多信息. 如果需要更多的信息,可以需要使用ida静态分析,或者od来调试跟踪一下.
灰常感谢!! 我去研究研究 试试看。
大卫无限 2017-09-04
  • 打赏
  • 举报
回复
从设备管理器里面禁用

是使用"MMDEVAPI\\AudioEndpoints"
如果是禁用物理设备,就是在设备管理器里面, 彻底消失.
是使用硬件id"HDAUDIO\FUNC_01&VEN_10EC&DEV_0892&SUBSYS_xxxxxx"
大概伪代码如下.

HDEVINFO hDevInfo=SetupDiGetClassDevs(NULL, NULL, NULL, DIGCF_ALLCLASSES|DIGCF_DEVICEINTERFACE);

SP_DEVINFO_DATA spDevInfoData ;
spDevInfoData.cbSize=sizeof(SP_DEVINFO_DATA);
//枚举硬件
for(int i=0; SetupDiEnumDeviceInfo(hDevInfo, i, &spDevInfoData); i++)
{
//获取属性
while(!SetupDiGetDeviceRegistryProperty(...)
{
...
}
//比较声音设备的id信息
...

...
//禁用
SetupDiSetClassInstallParams...
SetupDiCallClassInstaller...
}


至于托盘图标里面的那个,禁用,既不是物理设备,也不是驱动. 具体是什么我也不太清楚.
从我的分析上来看应该是一个未公开的接口.

我查询了一个,这个接口并没有公开, 或许mmsys.cpl存在参数可以达到效果,但是仍然没有说明文档,所以很遗憾,你需要自己研究.
你可以使用api Monitor 这个软件监控,但是由于是使用的com组件访问,所以并没有太多信息.
如果需要更多的信息,可以需要使用ida静态分析,或者od来调试跟踪一下.

sailing0123 2017-09-02
  • 打赏
  • 举报
回复
搜索windows API,再在Qt中调用,包含相应头文件

16,211

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧