作者: liswei
Walzer声明:此文为我同事所写, 文中参考引用了norains的<WinCE系统音量的设置>一文, 文中的CReg.h则出自微软WINCE500/PUBLIC下的公开代码. 网友若对文中一些技术细节有疑问, 可以移步到norains博客(http://blog.csdn.net/norains/)的相关文章下向norains请教
-----------------
最近一段时间在修改音量需求变化的时候,让我对在WINCE下对各种音量的设置有了一定的理解,现在将我的理解写到blog上,让各位指教。
首先我们来看下,这些声音设置都在注册表:HKEY_CURRENT_USER/ControlPanel/Volume下,里面的几个键值都是控制声音的。先解释如下:
Volume: 系统的主音量,范围是0x0 ~ 0xFFFFFFFF.
Screen: 屏幕敲击声. 当数值为0(或65536)无声,1为柔和,65538为洪亮
Key: 键盘敲击声,数值的意义和Screen相同.
Mute: 控制其它静音的选项. 置0x04位为1时允许事件声音,0x02允许应用程序声音,0x01允许警告声.需要注意的是,如果不允许应用程序声音,则警告声位也将被忽略.
知道各个键值的意义后,我从最主要的系统的主音量Volume说起。
一、对系统主音量Volume的操作
首先我们来看一段最简单的改变音量的代码:
waveOutSetVolume( 0 ,dwVolume);
waveOutSetVolume()的第一个参数是设备ID,因为需要更改的是整个系统音量,所以在这里直接取0值即可;第二个参数是需要设置的音量数值,范围是从 0x0 ~ 0xFFFFFFFF。
通过waveOutSetVolume()这个API,我们可以很容易的更改系统设备的音量,但这个时候,如果你去查看注册表的Volume的键值是没有变化的,因为它只修改了设备的音量,变化还没有这么快到达注册表。但你可以到“控制面板”中的“音量与声音”打开一下,注册表的值也随之改变。(反之,通过对注册表的单独操作对具体音量是起不到作用的)
所以,我对音量的操作,首先对注册表中的Volume进行操作,在用waveOutSetVolume