//========================================================================
//TITLE:
// WinCE系统音量的设置
//AUTHOR:
// norains
//DATE:
// Sunday 8-April-2007
//Environment:
// EVC4.0 + Standard SDK 4.2
// EVC4.0 + Standard SDK 5.0
//========================================================================
首先我们来看一段最简单的改变音量的代码:
waveOutSetVolume()的第一个参数是设备ID,因为需要更改的是整个系统音量,所以在这里直接取0值即可;第二个参数是需要设置的音量数值,范围是从 0x0 ~ 0xFFFFFFFF.
但这个函数的功能却也是非常有限的,也就是说,它只能更改系统的主音量;如果想修改屏幕点击声,则就无能为力.
有些细心的朋友会从"控制面板"的"声音"入手,发现每次在控制面板调节声音,相应的"ControlPanel/Volume"下的键值数值都会变更.但如果是直接修其下的改注册表,却是无论如何都达不到相应的功能的----因为没有通知系统,注册表已经被修改.
如果需要告知系统,注册表已经修改,并请系统依照修改的数值来更改音量,则需要调用微软一个未公开的函数:AudioUpdateFromRegistry().
这个函数在文档中是无法搜索到,如果需要调用这个函数,可以有两种方法.
一是直接包含"pwinuser.h"文件,然后直接调用.
二是调用coredll.dll库,引出该函数并使用.
这里展示一个调用的例子:
只要更新了注册表,然后调用该函数,则系统会根据键值来进行相应的调整.
那么现在让我们来看看位于"ControlPanel/Volume"注册表中各键值的意义:
Volume: 系统的主音量,范围是0x0 ~ 0xFFFFFFFF.
Screen: 屏幕敲击声. 当数值为0时即为无声,1为柔和,65538为洪亮
Key: 键盘敲击声,数值的意义和Screen相同.
Mute: 控制其它静音的选项. 置0x04位为1时允许事件声音,0x02允许应用程序声音,0x01允许警告声.需要注意的是,如果不允许应用程序声音,则警告声位也将被忽略.
如果每次更改音量都要改写注册表,调用动态链接库,会显得比较麻烦.为了写代码的便利,在此封装了这个声音的操作:
(注:CReg 请参见此篇文章:http://blog.youkuaiyun.com/norains/archive/2007/04/08/1556296.aspx)
由于CSysVolume类将复杂的操作封装在内部,因此设置音量的非常简单.
以更改屏幕敲击声为洪亮为例:
原文作者:norains
原文地址:http://blog.youkuaiyun.com/norains/archive/2007/04/08/1556912.aspx