一种情况:在Windows 7中,您可以打开音量混合器并调整各个应用程序的音量.虽然我不打算更改这个实际的特定值(因为我知道它是特定于Windows 7的),但我想一次性更改应用程序中所有内容的数量.我还需要能够完全静音应用程序中所有内容的声音.我需要这种能力与Windows XP及更高版本兼容.我假设它将涉及Windows API调用,但我不知道要调用什么.
解决方法
你可以通过创建一个类似于SoundActive的设置类来完成你想要的东西:布尔或PlaySounds:布尔或类似的东西.将它放在它自己的单元中,并有一个创建它的实例的初始化部分和一个释放它的终结部分(使其有效地成为全局值的集合).
需要访问这些设置的每个单元只使用包含它们的单元,并相应地调整行为.因此,您的每个子类或表格或其他任何需要检查的内容都会添加:
if CurrentSettings.PlaySounds then // Code that makes sounds,plays music,whatever.
设置类还可以包含跟踪当前音量级别的方法(在XP上,系统范围级别),以及使用MMSystem音量功能增加或减少音量的方法(此处有大量示例,通过Google进行操作)所以).然后,您的应用可以使用OnActivate和OnDeactivate事件在应用获得焦点时设置音量级别,并在应用失去焦点时将其恢复到正确的音量.
在Vista及更高版本中,您可以使用我前面提到的IAudioEndPointVolume
接口以及GetMasterVolumeLevel或SetMasterVolumeLevel方法来控制系统范围的卷(我有一个这样做的示例,以及相应的MMDevAPI接口定义)或设备级别卷(使用IMMDevioce.Activate
)首先选择正确的设备,然后在ppInterface参数中从IMMDevice.Activate接收设备接口上的上述IAudioEndPointVolume方法.
对于单个应用程序,使用ISimpleAudioVolume
接口,该接口有四种方法:GetMasterVolume和SetMasterVolume,它们控制应用程序音频会话的音量级别; GetMute和SetMute,允许您分别检索当前静音标志值或设置它. (MS的Larry Osterman是Vista和Win7中新的音频支持开发人员之一,他的博客上有一个很棒的starting point article,关于新API中的音频类型以及何时使用它们.)
从概念上讲,可以在运行时确定您正在使用的操作系统,以及在XP和更早版本上使用MMSystem功能以及Vista和更高版本上的MMDevAPI功能之间以编程方式切换.但是,期待有人在这里提供这样做的代码有点不合理.我提供的链接应该让你开始走上正确的轨道,当你遇到障碍时,通过这些障碍的具体帮助将是很好的问题.