1

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

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

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

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

我如何才能“告诉”我的应用程序我更改了默认设备?应用程序在启动 Windows 中默认的声音设备时通过什么方式读取和存储变量?我的问题有什么解决办法吗?

4

1 回答 1

2

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

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

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

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

此处提供了适用于 Windows Vista 及更高版本的正确解决方案。

于 2011-04-15T11:28:31.980 回答