你要求的是不可能在XP上;操作系統根本不支持每個應用程序的音量級別。
您可以通過創建類似於SoundActive: Boolean
或PlaySounds: Boolean
或類似設置的設置類來完成您想要的操作。將它放在它自己的單元中,並有一個初始化部分創建它的一個實例和一個釋放它的實現部分(實際上使其成爲全局值的集合)。
需要訪問這些設置的每個單元只使用包含它們的單位,並相應地調整行爲。因此,每個子類或形式或任何將只需要檢查添加的:
if CurrentSettings.PlaySounds then
// Code that makes sounds, plays music, whatever.
設置類也可以包含跟蹤當前的音量水平(XP系統,全系統級)的方法,以及使用MMSystem
音量函數來增加或減少音量的方法(這裏有大量的例子,通過谷歌的例子)。然後,您的應用可以使用OnActivate
和OnDeactivate
事件設置應用獲得焦點時的音量級別,並在應用失去焦點時將其恢復到適當的音量。
在Vista和更高,則可以使用IAudioEndPointVolume
接口我前面提到的和無論是GetMasterVolumeLevel
或SetMasterVolumeLevel
方法來控制全系統的體積(我有這樣的一個例子,與適當的MMDevAPI
接口定義一起)或設備級卷(使用IMMDevioce.Activate
首先選擇適當的設備,然後在ppInterface
參數中從IMMDevice.Activate
收到設備接口上的IAudioEndPointVolume
方法)。
對於單個應用程序,您使用ISimpleAudioVolume
接口,它有四種方法:GetMasterVolume
和SetMasterVolume
,其控制應用程序的音頻對話音量,並GetMute
和SetMute
允許您檢索當前靜音標誌值或設置它分別。 (MS的拉里奧斯特曼是開發人員,他在Vista和Win7上的新音頻支持工作之一,他的博客上有一個很棒的starting point article關於新API中的音頻類型以及何時使用它們。)
它在概念上可以在運行時確定您正在使用哪種操作系統,並且可以在XP和更早版本之間使用MMSystem
功能,以及在Vista和更高版本上使用MMDevAPI
功能。然而,期待這裏提供代碼的人有點不合理。我提供的鏈接應該讓你開始走上正確的軌道,當你遇到困難的時候遇到困難時,通過解決這些問題的具體幫助將會是一個很好的問題。
看一看這個問題: http://stackoverflow.com/questions/1092466/windows-xp-mute-unmute-audio-in-programmatically-in-python – Sebi
因爲我記得,XP早已不是按應用程序的聲音級別。你將在你的應用程序中使用一些中央聲音輸出API,如果你讓它出現在Windows API中,或者只是忽略並處置,那麼它會切換。 –
WinXP沒有每個應用程序的聲音控制功能。這是在Vista中添加的,它使用完全獨立的(新)API來添加新的接口來支持它。 Larry Osterman(MS老前輩之一)在他的博客上發表了一系列關於新聲音API的文章;我在這臺機器上沒有鏈接,但你應該可以通過谷歌搜索找到他。在C/C++上有關於SO的文章我記得還有一段時間,我會看看我是否可以找到一個搜索字詞供您使用來查找它們。 –