如何检测哪个程序正在Windows7上播放声音



我正在尝试编写一个小的后台程序,当另一个程序播放声音时,它会停止播放Winamp的音乐。关于通过Java访问Winamp的部分已经解决了,现在我需要一种方法来检测哪个程序播放当前播放的声音(可能我想让一些程序在不停止音乐的情况下播放它们的声音)。尽管我是用Java(+winapi)来做这件事的,但任何语言的一切都会有所帮助。

[编辑]由于我刚刚在第一个问题上获得了第一个反对票,这里有一些更详细的信息:我已经想好了如何使用winapi(但我不知道)并捕获音量级别之类的东西。仍然麻烦的是所提到的对所播放的声音的来源以及哪个程序播放声音的检测。winapi中有什么可以帮助我做到这一点吗?[/edit]

正如Deanna所提到的,您可以像Volume Mixer应用程序(从系统托盘图标启动)一样枚举音频播放会话,并获得指示会话状态的每个会话米。

你可以在下面的答案中找到一个C++应用程序:Windows 7上单个程序的峰值测量仪。仪表是每个会话的,启用音频的应用程序中可能有一个或多个会话,但最终只要您枚举它们,您就可以确定是否有任何活动播放。

我相信Vista+中的Windows Core Audio API可以让您获得每个应用程序的VU级别(毕竟,混音器会显示它)。这应该允许您在播放另一个应用程序时关闭该应用程序,等等。

最新更新