【问题标题】:How to detect which program is playing sound on windows 7?如何检测 Windows 7 上哪个程序正在播放声音?
【发布时间】:2013-01-23 09:07:24
【问题描述】:

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

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

【问题讨论】:

  • 这个问题可能是一个 big 过于笼统和模糊的问题,但我认为它不值得一票否决。我没有给你答案,我从来没有涉足过声音 API,但你可能想看看 MSDN 上的 DirectSound。
  • 为什么“我想要一个当前正在播放声音的所有程序的列表”过于笼统?就 DirectSound 的功能列表而言,它用于向它们播放声音或广告效果。阅读卷没有任何意义。
  • 糟糕 - 我的意思是 bit 不是 big

标签: java winapi audio winamp


【解决方案1】:

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

你可以在这个答案中找到一个 C++ 应用程序:Peak meters for individual programs on Windows 7。仪表是每个会话的,启用音频的应用程序中可能有一个或多个会话,但最终只要您枚举它们,您就可以确定那里是否有任何活动的播放。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • Powershell 是否提供用于访问这些 API 的 cmdlet?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多