あなたが求めているのはXPでは不可能です。 OSは単にアプリケーションごとのボリュームレベルをサポートしていません。
SoundActive: Boolean
やPlaySounds: Boolean
などのようなものを保持する設定クラスを作成することで、目的を達成できます。それ自身のユニットに配置し、インスタンスを作成する初期化セクションと、それを解放するファイナライゼーションセクション(事実上グローバル値のコレクションにする)を持っています。
これらの設定にアクセスする必要がある各ユニットは、それらを含むユニットを使用して、それに応じて動作を調整します。だからあなたの子クラスまたはフォームまたはちょうどチェックが追加必要となるものは何でもの各:
if CurrentSettings.PlaySounds then
// Code that makes sounds, plays music, whatever.
設定クラスは、(XP上で、システム全体のレベル)現在の音量レベルを追跡する方法をも含むことができ、ボリューム機能を使用してボリュームを増減する方法(ここでは数多くの例がありますが、これを実行する方法についてはGoogleを参照してください)。アプリはOnActivate
イベントとOnDeactivate
イベントを使用して、アプリがフォーカスを取得したときに音量レベルを設定し、アプリがフォーカスを失ったときに適切な音量に戻すことができます。
Vistaでは
と高い、あなたは、システム全体のボリューム(私は適切なMMDevAPI
インタフェース定義とともに、これを行うの一例を持っている)、またはデバイスレベルを制御するために、私は前に述べたIAudioEndPointVolume
インターフェイスのいずれかGetMasterVolumeLevel
またはSetMasterVolumeLevel
メソッドを使用することができます(適切なデバイスを最初に選択するためにIMMDevioce.Activate
を使用し、ppInterface
パラメータのIMMDevice.Activate
から受信したデバイスインターフェイス上の上記のIAudioEndPointVolume
メソッド)を使用します。あなたが現在ミュートフラグの値を取得または設定できるようにするために、アプリケーションのオーディオセッションの音量レベルを制御GetMasterVolume
とSetMasterVolume
、そしてGetMute
とSetMute
:
は、個々のアプリケーションでは、4つの方法がありますISimpleAudioVolume
インタフェースを使用しますそれはそれぞれ。 (VistaとWin7の新しいオーディオサポートに携わった開発者の1人であったMSのLarry Osterman氏は、新しいAPIのオーディオの種類とそれぞれの使い方についてブログにstarting point articleという素晴らしい名前を付けている。)
それはあなたが使用している、そしてプログラムでXPおよびそれ以前のMMSystem
機能、およびMMDevAPI
Vistaで機能性と高いを使用して切り替えるには、どのオペレーティングシステム実行時に決定するために、概念的には可能です。しかし、これを行うためのコードを提供するためにここに誰かを期待することは少し不合理です。私が提供したリンクは、あなたが正しい道を歩み始めるはずであり、道に沿って遭遇したときに、その傷つきを解決するための具体的な助けが素晴らしい質問になるでしょう。
はこの質問を見ている:私は覚えている何のため 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++のこれに関する記事があります。私はあなたがそれらを見つけるのに使うための検索語を見つけることができるかどうかを見ます。 –