查看应用程序是不是正在使用 Windows 10 上的麦克风

Posted

技术标签:

【中文标题】查看应用程序是不是正在使用 Windows 10 上的麦克风【英文标题】:See if an app is using the Microphone on Windows 10查看应用程序是否正在使用 Windows 10 上的麦克风 【发布时间】:2020-11-11 20:55:59 【问题描述】:

我正在尝试编写一个脚本来检查网络摄像头和麦克风是否在使用中。对于网络摄像头,我已经设法用 Python 编写了一些东西,但是到目前为止,我还没有找到一个很好的方法来为麦克风做同样的事情。

在 Windows 中,您在 SysTray 中有一个专用设置,当应用实际使用您的麦克风时会显示该设置(甚至显示哪个):

很明显,Windows 知道它目前是否被使用(这就是我所需要的),甚至知道哪个应用程序正在使用它。但是我还没有找到任何方法来读取这些信息。

是否有可能以某种方式从 Windows 本身获取数据? 在这一点上,我什至不介意将使用哪种语言,Python、C#、PowerShell 或其他。

PS:我知道可能有一些方法可以访问麦克风,但它不会显示在 SysTray 中,但这种情况与我想要实现的目标无关。

【问题讨论】:

您找到解决方案了吗? 不是一个“合适的”,我只是使用了下面描述的图像识别方法,这对我来说效果很好,但它可能不适合任何类型的“生产”环境 【参考方案1】:

我现在使用以下方法管理它 - 我只是截取桌面的屏幕截图并检查我希望出现在 SysTray 中的图标,以防某些应用正在使用麦克风。

为此,我使用了可以通过 pip 安装的包 imagesearchpip3 install python-imageseach-drov0

然后我通过该包截取屏幕并检查该项目是否在屏幕上可见:

from python_imagesearch.imagesearch import imagesearch

pos = imagesearch(imagePath)
microphone_on = pos[0] != -1
if microphone_on:
    print("Microphone is in use")
else:
    print("Microphone is not in use")

imagePath 中定义的图像如下所示:

我在以下页面找到了该包的信息:https://brokencode.io/how-to-easily-image-search-with-python/

识别效果非常好且速度很快,但当然这可能不是最佳解决方案,适用于您只想知道是否有任何东西在使用麦克风的简单情况。如果有一些可用的 API 可以被询问,那仍然会更好,但总比没有好,并解决了我的问题。

【讨论】:

只是出于好奇,当这个建议的答案显示在您最喜欢的浏览器中时,您的 Python 脚本会报告什么? 您好,只要带有系统托盘的任务栏可见,就可以正常工作。如果您在全屏模式下运行任何东西(例如游戏或演示模式下的东西),它当然不会检测到它(除非您有第二个带有任务栏的屏幕)。这能回答你的问题还是我弄错了? :-) 代码似乎只在寻找图像数据。由于您正在搜索的图像出现在此答案中,因此只要它在屏幕上,您的实现就会报告命中。即使不使用麦克风。如果确实如此,那么您所拥有的是一个脆弱的解决方案,有机会同时产生误报和误报。在消耗大量计算能力的同时。查看Windows.Media.Devices 命名空间,看看您是否可以使用这些接口中的任何一个。 好吧,我明白了。是的,这会将其检测为“麦克风正在使用”。然而,图像搜索将允许缩小位置(例如任务栏)。像这样“在野外”遇到这个图像也不太可能,所以它仍然适用于我的用例,这是一个每 2 分钟左右运行一次检查的个人项目。我检查了您之前提到的名称空间,但在那里找不到任何东西。我同意这不是专业应用程序的解决方案,因为它不够可靠 在这种情况下,Audio Session Events 可能就是您要查找的内容。 Audio Events for Legacy Audio Applications 展示了一个注册通知的小示例,以说明核心原则。

以上是关于查看应用程序是不是正在使用 Windows 10 上的麦克风的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Windows 10 uwp应用程序监控网络活动

谁知道如何查看Windows下正在运行的程序堆栈,Linux可以用gdb,windows下该用啥

windows如何查看oracle服务是不是正常

win2008 R2怎么查看是不是已经真正激活

Windows Store 10、Windows Phone 10 检查应用程序是不是预加载

检测 Windows 防火墙是不是阻止了我的程序