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

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

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

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

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

我怎么能“告诉”我的应用程序,我已经改变了默认的设备? 通过什么方式的应用程序读取和存储variables启动哪个声音设备是默认的Windows? 有没有解决我的问题?

Solutions Collecting From Web of "如何通知我的应用程序默认的声音播放设备已更改?"

注册表本质上是一个存储默认设置的数据库。 修改注册表中的值不会导致任何应用程序和Windows本身使用新的更新值重新初始化其设置。 Raymond Chen参考用户界面设置讨论了这个事情 。

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

因此,由于原因很明显,修改注册表值不是修改计算机配置的首选方式。

但是,如果您只是想让特定的应用程序注意到您已经更改了注册表中的值,那么简单的解决方案就是RegNotifyChangeKeyValue函数 。 这基本上订阅应用程序接收通知每次特定注册表项的值更改。

Windows Vista及更高版本的正确解决方案可在此处找到 。