我的Win XP SP3电脑上有两个声卡,我写了一个c++应用程序,我通过编辑以下注册表项来改变默认的播放设备:
regKey = Registry.CurrentUser.OpenSubKey(@"SoftwareMicrosoftMultimediaSound Mapper", true);
我的应用程序更改了"播放"键值,以便使用第一或第二声卡作为默认播放设备。
问题是当我更改默认设备时,应用程序仍然使用旧设备(程序启动时设置为默认设备)。如果更改后,我再次启动应用程序,一切正常,我可以使用"新的"默认播放设备。
我如何告诉我的应用程序我已经更改了默认设备?通过什么方式,应用程序读取和存储变量在启动哪个声音设备是默认的在Windows?我的问题有什么解决办法吗?
Registry本质上是一个存储默认设置的数据库。修改注册表中的值不会导致任何应用程序或Windows本身使用新的更新值重新初始化其设置。Raymond Chen通过用户界面设置来讨论这个问题。
还要考虑到这样的事情很可能在以后的Windows版本中改变。如果你决定升级到Windows Vista或7,你会再次回到这里问更多的问题,因为你的声音切换应用程序将不再工作了。后来的版本处理音频设备的方式与XP大为不同;首先,它们现在基于核心音频api。
因此,由于显而易见的原因,修改注册表值并不是修改计算机配置的首选方法。
但是如果您只是想让一个特定的应用程序注意到您已经更改了注册表中的值,那么简单的解决方案是RegNotifyChangeKeyValue
函数。这实际上是订阅应用程序,以便在每次特定注册表项的值更改时接收通知。
Windows Vista及更高版本的正确解决方案可在此处获得。