如何通知我的应用程序默认声音播放设备已更改?

时间:2011-04-15 11:08:50

标签: c++ windows windows-xp registry soundcard

我的Win XP SP3计算机上有两张声卡,我编写了一个C ++应用程序,通过编辑以下注册表项来更改默认播放设备:

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

我的应用更改了“播放”键值,以便将第一张或第二张声卡用作默认播放设备。

问题是当我更改默认设备时,应用程序仍然使用旧设备(程序启动时设置为默认设置)。如果在更改后,我再次启动应用程序,一切正常,我可以使用“新”默认播放设备。

如何为我的应用程序“告诉”我更改了默认设备?应用程序以什么方式读取并存储变量,启动哪个声音设备在Windows中是默认的?我的问题有解决办法吗?

1 个答案:

答案 0 :(得分:2)

注册表本质上是一个存储默认设置的数据库。修改注册表中的值不会导致任何应用程序或Windows本身使用新的更新值重新初始化其设置。 Raymond Chen discusses this very thing with reference to user interface settings

还要考虑在Windows的更高版本中,这样的事情很可能会发生变化。如果您决定更新到Windows Vista或7,那么您将再次回到这里询问更多问题,因为您的声音切换器应用程序将不再起作用。后来的版本处理音频设备的方式与在XP中处理的音频设备完全不同;对于初学者来说,他们现在基于Core Audio APIs

因此,出于显而易见的原因,修改注册表值不是修改计算机配置的首选方法。

但是如果您只是想让特定的应用程序注意到您已经更改了注册表中的值,那么简单的解决方案就是RegNotifyChangeKeyValue function。这实质上是订阅应用程序,以便在每次特定注册表项的值发生更改时接收通知。

Windows Vista及更高版本的正确解决方案是available here