【问题标题】:use Serial Device to control Application Volumes使用串行设备控制应用程序卷
【发布时间】:2013-11-07 15:49:53
【问题描述】:

我已经构建了一个外部设备来控制 Windows7 应用程序的级别。串行通信有效,但我正在努力使用内置的 Windows 音频会话 API (WASAPI)。

特别是,我有两个问题:

  1. WASAPI 是否适合我的问题?对我来说,它似乎太大了
  2. 如何访问每个正在运行的程序的级别?

如果你能帮我解决这个问题,我会很高兴!

【问题讨论】:

    标签: visual-c++ audio windows-7 volume wasapi


    【解决方案1】:

    尚未检查,但您似乎确实可以为此使用 WASAPI。使用此 http://msdn.microsoft.com/en-us/library/windows/desktop/dd316769%28v=vs.85%29.aspx 文档作为起点。我希望它起作用的方式是,对于每个 IMMDevice(从 IMMDeviceEnumerator 获得),您激活一个 IAudioSessionManager,使用它来获得一个 ISimpleAudioVolume,然后您就可以使用 Get/SetMasterVolume 进行会话。为了让 IAudioSessionManager 为您提供 ISimpleAudioVolume,您还需要您想要控制的会话的会话 GUID,因为多个进程可能会以共享模式写入同一设备。为此,您可以使用 IAudioSessionEnumerator 获取“当前”会话,但请注意,这不会随着新会话添加到系统而更新。为此,您将需要 IAudioSessionManager2::RegisterSessionNotification (注意,有一些特定的线程要求:它必须在 MTA 单元中运行)并实现您自己的回调以将会话添加到一些内部集合中(由您维护并最初从 IAudioSessionEnumerator 填充)。另请注意,会话枚举器通知内容为您提供 IAudioSessionControl,您必须将其 QueryInterface 到 IAudioSessionControl2 以获取最终需要控制每个会话音量的会话 guid。最后,您还需要使用 IAudioSessionControl::RegisterAudioSessionNotification 来获取会话主音量更改的通知,以便您可以与(例如)sndvol(Windows 音量混合器)保持同步。再次注意,这一切都来自记忆,我还没有实际测试或验证过这些。关于 WASAPI 过大,是的,我认为你是对的。无论如何,这至少应该让你开始。祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-03
      相关资源
      最近更新 更多