あなたが求めていることは XP では不可能です。OS は、アプリケーションごとの音量レベルをサポートしていません。
SoundActive: Boolean
のようなものを保持する設定クラスを作成することで、必要なことを達成できますPlaySounds: Boolean
。独自のユニットに配置し、そのインスタンスを作成する初期化セクションと、それを解放するファイナライズ セクションを用意します (効果的にグローバル値のコレクションにします)。
これらの設定にアクセスする必要がある各ユニットは、それらを含むユニットを使用し、それに応じて動作を調整します。したがって、子クラスやフォームなど、チェックを追加する必要があるものはすべて、次のようになります。
if CurrentSettings.PlaySounds then
// Code that makes sounds, plays music, whatever.
設定クラスには、現在の音量レベル (XP ではシステム全体のレベル) を追跡するメソッド、および音量関数を使用して音量を増減するメソッドも含めることができます (MMSystem
ここや Google を介してそうする例がたくさんあります)。 )。その後、アプリがOnActivate
およびOnDeactivate
イベントを使用して、アプリがフォーカスを得たときに音量レベルを設定し、アプリがフォーカスを失ったときに適切な音量に戻すことができます。
Vista 以降では、IAudioEndPointVolume
前述のインターフェイスと、GetMasterVolumeLevel
またはSetMasterVolumeLevel
メソッドのいずれかを使用して、システム全体のボリューム (適切なインターフェイス定義と共にこれを行う例がありMMDevAPI
ます) またはデバイス レベルのボリューム (IMMDevioce.Activate
適切なデバイスを選択するために使用) を制御できます。最初に、次にパラメータでIAudioEndPointVolume
受け取ったデバイス インターフェイスの上記のメソッド)。IMMDevice.Activate
ppInterface
個々のアプリケーションでは、アプリケーションのオーディオ セッションのボリューム レベルを制御するおよびのISimpleAudioVolume
4 つのメソッドを持つインターフェースを使用し、現在のミュート フラグ値を取得または設定できるようにします。(MS の Larry Osterman は、Vista と Win7 での新しいオーディオ サポートに取り組んだ開発者の 1 人であり、新しい API のオーディオの種類とそれぞれをいつ使用するかについて、彼のブログで素晴らしい出発点の記事を書いています。 )GetMasterVolume
SetMasterVolume
GetMute
SetMute
MMSystem
使用しているオペレーティング システムを実行時に判断し、XP 以前の機能と Vista 以降の機能をプログラムで切り替えることは、概念的には可能MMDevAPI
です。ただし、そのためのコードを誰かが提供してくれると期待するのは少し無理があります。私が提供したリンクは、あなたが正しい道を歩み始めるのに役立つはずであり、途中で障害に遭遇した場合、それらの障害を解決するための具体的なヘルプは素晴らしい質問になるでしょう.