C# &引用;每项申请”;windowsxp中的音频混音器

C# &引用;每项申请”;windowsxp中的音频混音器,c#,winapi,audio,interop,C#,Winapi,Audio,Interop,我需要在Windows XP中静音和取消静音来自其他进程的声音。我在寻找最好的策略。可以编写一个内核模式混频器来过滤输出设备的输入吗?我的另一种方法是为各种API设置钩子来拦截它们的Win32调用。我强烈希望采用侵入性较小的方法 一些考虑: 涵盖使用WinMM和DirectSound系统组件的应用程序可能就足够了(即,我不需要担心其他音频接口) 这最终需要从C#应用程序中使用。我对互操作相当熟练,但不具备实现这一点的Win32内部知识 可以列出所有需要静音的应用程序,并分别处理每个应用程序,尽管

我需要在Windows XP中静音和取消静音来自其他进程的声音。我在寻找最好的策略。可以编写一个内核模式混频器来过滤输出设备的输入吗?我的另一种方法是为各种API设置钩子来拦截它们的Win32调用。我强烈希望采用侵入性较小的方法

一些考虑: 涵盖使用WinMM和DirectSound系统组件的应用程序可能就足够了(即,我不需要担心其他音频接口)

这最终需要从C#应用程序中使用。我对互操作相当熟练,但不具备实现这一点的Win32内部知识

可以列出所有需要静音的应用程序,并分别处理每个应用程序,尽管该列表预计会增加


另外,如果有人担心,这些操作将在用户同意的情况下执行(无可疑业务)。

内核模式驱动程序的问题是它们通常不支持进程。这是干净分层体系结构的一部分。处理流程是操作系统本身的责任。音频驱动程序应该处理音频。现在,混音器肯定应该处理多个音频流,可能会给它们带来不等的重量,但它不应该特别关心音频流来自何处。此外,内置混音器的设计不是可重放的,因此您必须在混音前拦截音频流

因此,在XP上,使用Microsoft Detours在API级别拦截调用更有意义。您有呼叫过程信息。DeOrts基本上将汇编注入到用户模式的OS部分,所以我建议使用C++而不是C带迂回的代码。
据我所知,在Vista上,audiostack被重写,这样就可以将audiostreams与应用程序关联起来,但这是一项系统范围的功能。

如果不编写一些非常低级的代码,我认为您将找不到任何简单的方法来实现这一点。Windows API根本不提供那种级别的灵活性。您应该仔细考虑此功能对您的重要性。不幸的是,这不是可选功能。但我也绝对不怕写低级代码。