1

Win XP SP3 コンピュータに 2 つのサウンド カードがあり、次のレジストリ エントリを編集してデフォルトの再生デバイスを変更する C++ アプリを作成しました。

regKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Multimedia\Sound Mapper", true);

私のアプリは、1 つ目または 2 つ目のサウンド カードをデフォルトの再生デバイスとして使用するために、「再生」キーの値を変更します。

問題は、デフォルトのデバイスを変更すると、アプリケーションがまだ古いデバイスを使用していることです (プログラムの起動時にデフォルトとして設定されていました)。変更後にアプリケーションを再度起動すると、すべて正常に動作し、「新しい」デフォルトの再生デバイスを使用できます。

デフォルトのデバイスを変更したことをアプリケーションに伝えるにはどうすればよいですか? Windows で既定のサウンド デバイスを起動するときに、アプリケーションはどのようにして変数を読み取って保存しますか? 私の問題の解決策はありますか?

4

1 に答える 1

2

レジストリは基本的に、デフォルト設定を保存するデータベースです。レジストリの値を変更しても、アプリケーションや Windows 自体が新しい更新された値で設定を再初期化することはありません。Raymond Chen は、ユーザー インターフェースの設定を参照して、まさにこのことについて説明しています

また、このようなことは、Windows の以降のバージョンで変更される可能性が非常に高いことも考慮してください。Windows Vista または 7 に更新することに決めた場合は、サウンド スイッチャー アプリケーションが機能しなくなるため、ここに戻ってさらに質問することになります。それ以降のバージョンでは、オーディオ デバイスの処理が XP での処理とは大きく異なります。まず第一に、現在はCore Audio APIに基づいています。

したがって、明らかな理由から、レジストリ値を変更することは、コンピュータの構成を変更するための推奨される方法ではありません。

ただし、レジストリの値を変更したことを特定のアプリケーションに通知させたいだけの場合、簡単な解決策はRegNotifyChangeKeyValuefunctionです。これは基本的に、特定のレジストリ キーの値が変更されるたびに通知を受け取るようにアプリケーションをサブスクライブします。

Windows Vista 以降の正しい解決策は、ここで入手できます

于 2011-04-15T11:28:31.980 に答える