📄 对wince中各种音量设置一点见解.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0061)http://www.cnblogs.com/walzer/archive/2008/02/20/1074438.html -->
<HTML><HEAD
id=Head><TITLE>对WINCE中各种音量设置一点见解 - www.Walzer.cn - 原创技术博客 - 博客园</TITLE>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<META id=metaKeywords content=对WINCE中各种音量设置一点见解 name=keywords><LINK
id=CommondCss href="对WINCE中各种音量设置一点见解.files/common.css" type=text/css
rel=stylesheet><LINK id=MainCss href="对WINCE中各种音量设置一点见解.files/style.css"
type=text/css rel=stylesheet><LINK id=RSSLink title=RSS
href="http://www.cnblogs.com/walzer/rss.aspx" type=application/rss+xml
rel=alternate>
<META content="MSHTML 6.00.2900.3157" name=GENERATOR></HEAD>
<BODY>
<FORM id=Form1 name=Form1 onsubmit="javascript:return WebForm_OnSubmit();"
action=1074438.html method=post>
<DIV><INPUT id=__EVENTTARGET type=hidden name=__EVENTTARGET> <INPUT
id=__EVENTARGUMENT type=hidden name=__EVENTARGUMENT> <INPUT
id=" __VIEWSTATE" type=hidden name=__VIEWSTATE> </DIV>
<SCRIPT type=text/javascript>
<!--
var theForm = document.forms['Form1'];
if (!theForm) {
theForm = document.Form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
// -->
</SCRIPT>
<SCRIPT src="对WINCE中各种音量设置一点见解.files/WebResource.axd"
type=text/javascript></SCRIPT>
<SCRIPT language=JavaScript>
function ctlent(evt,id)
{
if(evt.ctrlKey && evt.keyCode == 13)
{
try
{
TempSave(id);
}
catch(ex)
{
}
finally
{
__doPostBack('AjaxHolder$PostComment$btnSubmit','')
}
}
}</SCRIPT>
<SCRIPT language=JavaScript>function SetReplyAuhor(author){document.getElementById('AjaxHolder_PostComment_tbComment').value+="@"+author+"\n";document.getElementById('AjaxHolder_PostComment_tbComment').focus();return false}</SCRIPT>
<SCRIPT src="对WINCE中各种音量设置一点见解.files/ScriptResource.axd"
type=text/javascript></SCRIPT>
<SCRIPT src="F:\FACE\对WINCE中各种音量设置一点见解.files\ScriptResource(1).axd"
type=text/javascript></SCRIPT>
<SCRIPT src="F:\FACE\对WINCE中各种音量设置一点见解.files\ScriptResource(2).axd"
type=text/javascript></SCRIPT>
<SCRIPT src="对WINCE中各种音量设置一点见解.files/js" type=text/javascript></SCRIPT>
<SCRIPT type=text/javascript>
<!--
function WebForm_OnSubmit() {
if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) return false;
return true;
}
// -->
</SCRIPT>
<TABLE class=Framework cellSpacing=0 cellPadding=0 width="100%">
<TBODY>
<TR>
<TD colSpan=3>
<DIV id=top>
<TABLE cellSpacing=0 cellPadding=10>
<TBODY>
<TR>
<TD noWrap>
<H1><A class=headermaintitle id=Header1_HeaderTitle
href="http://www.cnblogs.com/walzer/">http://www.cnblogs.com/walzer/</A></H1>专注于智能手机上的APP和BSP开发。<BR>所谓高手,也就是熟悉别人制定的游戏规则、并且能在规则内跳舞的人。
</TD></TR></TBODY></TABLE></DIV>
<DIV id=sub>
<DIV id=sub-right>
<DIV class=BlogStats>posts - 59, comments - 299, trackbacks - 1, articles
- 0</DIV></DIV> <A id=Header1_MyLinks1_HomeLink
href="http://www.cnblogs.com/">博客园</A> :: <A
id=Header1_MyLinks1_MyHomeLink
href="http://walzer.cnblogs.com/">首页</A> :: <A
id=Header1_MyLinks1_NewPostLink
href="http://www.cnblogs.com/walzer/admin/EditPosts.aspx?opt=1">新随笔</A> ::
<A id=Header1_MyLinks1_ContactLink accessKey=9
href="http://www.cnblogs.com/walzer/contact.aspx?id=1">联系</A> :: <A
id=Header1_MyLinks1_Syndication
href="http://www.cnblogs.com/walzer/rss">订阅</A> <A class=XMLLink
id=Header1_MyLinks1_XMLLink href="http://www.cnblogs.com/walzer/rss"><IMG
style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px"
alt=订阅 src="对WINCE中各种音量设置一点见解.files/xml.gif"></A> :: <A
id=Header1_MyLinks1_Admin
href="http://www.cnblogs.com/walzer/admin/EditPosts.aspx">管理</A>
</DIV></TD></TR>
<TR>
<TD class=LeftCell>
<DIV id=leftmenu></DIV></TD>
<TD class=MainCell>
<DIV id=main>
<SCRIPT type=text/javascript>
//<![CDATA[
Sys.WebForms.PageRequestManager._initialize('AjaxHolder$scriptmanager1', document.getElementById('Form1'));
Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tAjaxHolder$UpdatePanel1'], [], [], 90);
//]]>
</SCRIPT>
<DIV class=post>
<DIV class=posthead>
<H2><A class=singleposttitle id=AjaxHolder_ctl01_TitleUrl
href="http://www.cnblogs.com/walzer/archive/2008/02/20/1074438.html">对WINCE中各种音量设置一点见解</A>
</H2>Posted on 2008-02-20 09:41 <A
href="http://walzer.cnblogs.com/">Walzer</A> 阅读(64) <A
href="http://www.cnblogs.com/walzer/archive/2008/02/20/1074438.html#Post">评论(0)</A>
<A
href="http://www.cnblogs.com/walzer/admin/EditPosts.aspx?postid=1074438">编辑</A>
<A
href="http://www.cnblogs.com/walzer/AddToFavorite.aspx?id=1074438">收藏</A>
<IMG height=1 src="对WINCE中各种音量设置一点见解.files/1074438.jpg" width=1> <!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<rdf:Description
rdf:about="http://www.cnblogs.com/walzer/archive/2008/02/20/1074438.html"
dc:identifier="http://www.cnblogs.com/walzer/archive/2008/02/20/1074438.html"
dc:title="对WINCE中各种音量设置一点见解"
trackback:ping="http://www.cnblogs.com/walzer/services/trackbacks/1074438.aspx" />
</rdf:RDF>
--></DIV>
<DIV class=postbody>作者:
liswei<BR><BR>最近一段时间在修改音量需求变化的时候,让我对在WINCE下对各种音量的设置有了一定的理解,现在将我的理解写到blog上,让各位指教。
<P
align=left>首先我们来看下,这些声音设置都在注册表:HKEY_CURRENT_USER\ControlPanel\Volume下,里面的几个键值都是控制声音的。先解释如下:</P>
<P align=left>Volume: 系统的主音量,范围是0x0 ~
0xFFFFFFFF.<BR> <BR>Screen:
屏幕敲击声. 当数值为0(或65536)无声,1为柔和,65538为洪亮<BR><BR>Key:
键盘敲击声,数值的意义和Screen相同.<BR>
<BR>Mute: 控制其它静音的选项.
置0x04位为1时允许事件声音,0x02允许应用程序声音,0x01允许警告声.需要注意的是,如果不允许应用程序声音,则警告声位也将被忽略.</P>
<P align=left>知道各个键值的意义后,我从最主要的系统的主音量Volume说起。</P>
<P align=left>一、对系统主音量Volume的操作</P>
<P
align=left>首先我们来看一段最简单的改变音量的代码: </P>
<DIV class=HtmlCode title=点击运行该代码! style="CURSOR: pointer"
onclick="preWin=window.open('','','');preWin.document.open();preWin.document.write(this.innerText);preWin.document.close();"
;>DWORD dwVolume <SPAN style="COLOR: rgb(0,0,0)">=</SPAN><SPAN
style="COLOR: rgb(0,0,0)"> </SPAN><SPAN
style="COLOR: rgb(0,0,0)">0xAAAAAAAA</SPAN><SPAN
style="COLOR: rgb(0,0,0)">;<BR>waveOutSetVolume(</SPAN><SPAN
style="COLOR: rgb(0,0,0)">0</SPAN><SPAN
style="COLOR: rgb(0,0,0)">,dwVolume);</SPAN> </DIV>
<P
align=left> <BR>waveOutSetVolume()的第一个参数是设备ID,因为需要更改的是整个系统音量,所以在这里直接取0值即可;第二个参数是需要设置的音量数值,范围是从
0x0 ~ 0xFFFFFFFF。</P>
<P
align=left>通过waveOutSetVolume()这个API,我们可以很容易的更改系统设备的音量,但这个时候,如果你去查看注册表的Volume的键值是没有变化的,因为它只修改了设备的音量,变化还没有这么快到达注册表。但你可以到“控制面板”中的“音量与声音”打开一下,注册表的值也随之改变。(反之,通过对注册表的单独操作对具体音量是起不到作用的)</P>
<P
align=left>所以,我对音量的操作,首先对注册表中的Volume进行操作,在用waveOutSetVolume()这个API具体改变音量,这样可以达到一致。具体操作代码如下:</P>
<DIV class=HtmlCode title=点击运行该代码! style="CURSOR: pointer"
onclick="preWin=window.open('','','');preWin.document.open();preWin.document.write(this.innerText);preWin.document.close();"
;>
<P align=left>DWORD dwVolume = 0;<BR>CReg* pVolumeReg = NULL;<BR></P>
<P align=left> pVolumeReg = new CReg( HKEY_CURRENT_USER,
TEXT("ControlPanel\\Volume") );</P>
<P align=left> dwVolume =
pVolumeReg->ValueDW(TEXT("Volume"));<BR>。。。。。。。。。。。。。。对音量的具体设置</P>
<P align=left>if( waveOutSetVolume(NULL, dwVolume) != MMSYSERR_NOERROR
)
音量设置是否成功<BR> {<BR> DBGMSG(ZONE_1, (TEXT("waveOutSetVolume
failed, [MainLayere.cpp,
SetVolume]")));<BR> }<BR> <BR> pVolumeReg->SetDW(TEXT("Volume"),dwVolume); 设置注册表<BR> delete
pVolumeReg;<BR> pVolumeReg = NULL; </P></DIV>
<P
align=left> 上面用到的CReg是一个对注册表操作的类,是我们小组用的一个基类(Walzer注:在WINCE500目录下搜索CReg可以找到,
其实微软的人也很懒)。这样我们对主音量设置就很完善了。</P>
<P align=left>二、对硬件按键声音(KEY键值)的设置</P>
<P align=left>
尽管waveOutSetVolume()这个API对主音量设置很好用,但这个函数的功能却也是非常有限的,也就是说,它只能更改系统的主音量;如果想修改硬件按键声音或屏幕敲击声,则就无能为力.<BR> <BR>
有些比较细心的朋友可能会从"控制面板"的"声音"入手,发现每次在控制面板调节声音,相应的"ControlPanel\Volume"下的键值数值都会变更.但如果是直接修其下的改注册表,却是无论如何都达不到相应的功能的----因为没有通知系统,注册表已经被修改.<BR>
<BR>
如果需要告知系统,注册表已经修改,并请系统依照修改的数值来更改音量,则需要调用微软一个未公开的API:AudioUpdateFromRegistry().<BR>
<BR>
这个API在文档中是无法搜索到,如果需要调用这个函数,可以有两种方法.<BR>
<BR>
一是直接包含"pwinuser.h"文件,然后直接调用.<BR>
<BR>
二是调用coredll.dll库,引出该函数并使用.<BR> <BR>
第一种方法比较不稳定,因为有一些人的sdk中没有这个pwinuser.h文件,所以程序找不到。我还是推荐用第二种方法,直接调用该API(就象我们组长说的暴力调用API,这个方法真的还是不错的。)</P>
<P align=left> 其具体代码如下: </P>
<DIV class=HtmlCode title=点击运行该代码! style="CURSOR: pointer"
onclick="preWin=window.open('','','');preWin.document.open();preWin.document.write(this.innerText);preWin.document.close();"
;>
<P align=left><FONT size=1> </P>
<DIV
style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN
style="COLOR: #008080"> 1</SPAN><IMG alt=""
src="对WINCE中各种音量设置一点见解.files/None.gif" align=top><SPAN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -