理论上应该可以实现。我不太清楚 Vista 是否是改变了 MCI API,但从另一种角度应该也可以实现 XP 下的应用程序音量单独控制。下面是两条思路:
思路一:用 dll HOOK 的方式截取 mmsystem.dll 中的所有 MCI API,然后用 DirectSound 合成声音,这样就能控制每个程序的音量。缺点是,游戏中本身就用 DirectSound 的声音无法控制。
思路二:做一个 MSVAD 驱动,用它来代替原来的默认驱动。这样,所有声音播放会使用 MSVAD 驱动,改变声音后再将缓冲区递交给原来的驱动即可。
当年有一个叫 QSound 的应用程序,可以将 Windows 系统下所有应用的声音 QSound 化,既然它可以捕获并改变所有声音播放,那么可以肯定的是,它若要单独改变一个应用程序的声音并非不可能。