VC播放声音函数PlaySound和sndPlaySound的用法

本文详细介绍了Windows平台下的PlaySound函数,包括其语法、参数说明、使用标志及其含义,并提供了具体的使用示例。此外,还列举了一系列系统声音标签,可用于通过PlaySound函数播放。
2009-09-11 15:21

一、PlaySound函数的声明为:

BOOL PlaySound(LPCSTR pszSound,HMODULE hmod,DWORD fdwSound);

参数说明:

pszSound:是指定了要播放声音的字符串,该参数可以是WAVE文件的名字,或是WAVE资源的名字,或是内存中声音数据的指针,或是在系统注册表WIN.INI中定义的系统事件声音.如果该参数为NULL则停止正在播放的声音.

hmod:是应用程序的实例句柄,当播放WAV资源时要用到该参数,否则它必须为NULL.

fdwSound: 是标志的组合,如下表所示。若成功则函数返回TRUE,否则返回FALSE
二、播放标志以及含义:

SND_APPLICATION
用应用程序指定的关联来播放声音。

SND_ALIAS
pszSound
参数指定了注册表或WIN.INI中的系统事件的别名。

SND_ALIAS_ID
pszSound
参数指定了预定义的声音标识符。

SND_ASYNC
用异步方式播放声音,PlaySound函数在开始播放后立即返回。

SND_FILENAME
pszSound
参数指定了WAVE文件名。

SND_LOOP
重复播放声音,必须与SND_ASYNC标志一块使用。

SND_MEMORY
播放载入到内存中的声音,此时pszSound是指向声音数据的指针。

SND_NODEFAULT
不播放缺省声音,若无此标志,则PlaySound在没找到声音时会播放缺省声音。

SND_NOSTOP
PlaySound
不打断原来的声音播出并立即返回FALSE

SND_NOWAIT
如果驱动程序正忙则函数就不播放声音并立即返回。
SND_PURGE
停止所有与调用任务有关的声音。若参数pszSoundNULL,就停止所有的声音,否则,停止pszSound指定的声音。
SND_RESOURCE
pszSound
参数是WAVE资源的标识符,这时要用到hmod参数。
SND_SYNC
同步播放声音,在播放完后PlaySound函数才返回。

三、函数使用方法及代码:

注意:在使用函数前要加入:

#include "mmsystem.h"//导入声音头文件

#pragma comment(lib,"winmm.lib")//导入声音头文件库

、直接播出声音文件:

PlaySound("c://win95//media//The Microsoft Sound.wav", NULL, SND_FILENAME | SND_ASYNC);
注意:参数中的路径使用两个连续的反斜杠转义代表一个反斜杠。

、把声音文件加入到资源中,然后从资源中播放声音:

Visual C++支持WAVE型资源,用户在资源视图中单击鼠标右键并选择Import命令,然后在文件选择对话框中选择The Microsoft Sound.wav文件,则该文件就会被加入到WAVE资源中。假定声音资源的IDIDR_STARTWIN,则下面的调用同样会输出启动声音:

PlaySound((LPCTSTR)IDR_STARTWIN, AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC);

或:

PlaySound(MAKEINTRESOURCE(IDR_WAVE2),AfxGetResourceHandle(),SND_ASYNC|SND_RESOURCE|SND_NODEFAULT|SND_LOOP);//将声音文件写入到程序中
、用PlaySound播放系统声音:

Windows启动的声音是由SystemStart定义的系统声音,因此可以用下面的方法播放启动声音:
ccc
            

sndPlaySound函数的声明为:
BOOL sndPlaySound(LPCSTR lpszSound, UINT fuSound);

用法:

除了不能指定资源名字外,参数lpszSoundPlaySound的是一样的。参数fuSound是如何播放声音的标志,可以是SND_ASYNCSND_LOOPSND_MEMORYSND_NODEFAULTSND_NOSTOPSND_SYNC的组合,这些标志的含义与PlaySound的一样。
可以看出,sndPlaySound不能直接播放声音资源。要用该函数播放WAVE文件,可按下面的方式调用:
sndPlaySound("MYSOUND.WAV",SND_ASYNC);

来源: http://hi.baidu.com/yefeng654321/blog/item/f0cc05b1b9dc485e09230289.html

对于PlaySound 的补充:

其实你给它任何一个字符串,它都会返回 TRUE 表明它“成功”了.

因为如果它找不到你给它的字符串,它就会使用“默认响声”(控制面板->声音和音频设备->声音)

它能找到哪些字符串呢?

如下:

下面是注册表中的,可以使用字符串如"DeviceConnect" "DeviceDisconnect" "DeviceFail"

下面部分全是注册表中的:

 

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER/AppEvents/EventLabels]

[HKEY_CURRENT_USER/AppEvents/EventLabels/.Default]
@="默认响声"
"DispFileName"="@mmsys.cpl,-5824"

[HKEY_CURRENT_USER/AppEvents/EventLabels/ActivatingDocument]
@="Complete Navigation"
"DispFileName"=hex(2):40,00,69,00,65,00,66,00,72,00,61,00,6d,00,65,00,2e,00,64,/
  00,6c,00,6c,00,2c,00,2d,00,31,00,30,00,33,00,32,00,31,00,00,00

[HKEY_CURRENT_USER/AppEvents/EventLabels/AppGPFault]
@="程序错误"
"DispFileName"="@mmsys.cpl,-5825"

[HKEY_CURRENT_USER/AppEvents/EventLabels/BlockedPopup]
@="Blocked Pop-up Window"
"DispFileName"=hex(2):40,00,69,00,65,00,66,00,72,00,61,00,6d,00,65,00,2e,00,64,/
  00,6c,00,6c,00,2c,00,2d,00,31,00,30,00,33,00,32,00,35,00,00,00

[HKEY_CURRENT_USER/AppEvents/EventLabels/BuildComplete]
@="Build Complete"

[HKEY_CURRENT_USER/AppEvents/EventLabels/BuildError]
@="Build Error"

[HKEY_CURRENT_USER/AppEvents/EventLabels/BuildWarning]
@="Build Warning"

[HKEY_CURRENT_USER/AppEvents/EventLabels/CCSelect]
@="Select"
"DispFileName"=hex(2):40,00,69,00,65,00,66,00,72,00,61,00,6d,00,65,00,2e,00,64,/
  00,6c,00,6c,00,2c,00,2d,00,31,00,30,00,33,00,32,00,33,00,00,00

[HKEY_CURRENT_USER/AppEvents/EventLabels/Close]
@="关闭程序"
"DispFileName"="@mmsys.cpl,-5826"

[HKEY_CURRENT_USER/AppEvents/EventLabels/CriticalBatteryAlarm]
@="严重电池警告"
"DispFileName"="@mmsys.cpl,-5827"c"DispFileName"="@mmsys.cpl,-5830"

[HKEY_CURRENT_USER/AppEvents/EventLabels/EmptyRecycleBin]
@="清空回收站"
"DispFileName"="@mmsys.cpl,-5831"

[HKEY_CURRENT_USER/AppEvents/EventLabels/FeedDiscovered]
@="Feed Discovered"
"DispFileName"=hex(2):40,00,69,00,65,00,66,00,72,00,61,00,6d,00,65,00,2e,00,64,/
  00,6c,00,6c,00,2c,00,2d,00,31,00,37,00,33,00,31,00,35,00,00,00

[HKEY_CURRENT_USER/AppEvents/EventLabels/LowBatteryAlarm]
@="电池电力不足告警"
"DispFileName"="@mmsys.cpl,-5832"

[HKEY_CURRENT_USER/AppEvents/EventLabels/MailBeep]
@="新邮件通知"
"DispFileName"="@mmsys.cpl,-5837"

[HKEY_CURRENT_USER/AppEvents/EventLabels/Maximize]
@="最大化"
"DispFileName"="@mmsys.cpl,-5833"

[HKEY_CURRENT_USER/AppEvents/EventLabels/MenuCommand]
@="菜单命令"
"DispFileName"="@mmsys.cpl,-5834"

[HKEY_CURRENT_USER/AppEvents/EventLabels/MenuPopup]
@="弹出菜单"
"DispFileName"="@mmsys.cpl,-5835"

[HKEY_CURRENT_USER/AppEvents/EventLabels/Minimize]
@="最小化"
"DispFileName"="@mmsys.cpl,-5836"

[HKEY_CURRENT_USER/AppEvents/EventLabels/MoveMenuItem]
@="Move Menu Item"
"DispFileName"=hex(2):40,00,69,00,65,00,66,00,72,00,61,00,6d,00,65,00,2e,00,64,/
  00,6c,00,6c,00,2c,00,2d,00,31,00,30,00,33,00,32,00,32,00,00,00

[HKEY_CURRENT_USER/AppEvents/EventLabels/MSMSGS_ContactOnline]
@="联系人联机"
"DispFileName"="@/"xpob2res.dll/",-41583"

[HKEY_CURRENT_USER/AppEvents/EventLabels/MSMSGS_NewAlert]
@="新警报"
"DispFileName"="@/"xpob2res.dll/",-41585"

[HKEY_CURRENT_USER/AppEvents/EventLabels/MSMSGS_NewMail]
@="新邮件"
"DispFileName"="@/"xpob2res.dll/",-41586"

[HKEY_CURRENT_USER/AppEvents/EventLabels/MSMSGS_NewMessage]
@="新消息"
"DispFileName"="@/"xpob2res.dll/",-41584"

[HKEY_CURRENT_USER/AppEvents/EventLabels/MSVC_HitBP]
@="Breakpoint Hit"

[HKEY_CURRENT_USER/AppEvents/EventLabels/MSVC_OutputError]
@="Error in Output"

[HKEY_CURRENT_USER/AppEvents/EventLabels/MSVC_OutputWarning]
@="Warning in Output"

[HKEY_CURRENT_USER/AppEvents/EventLabels/Navigating]
@="Start Navigation"
"DispFileName"="@mmsys.cpl,-5838"

[HKEY_CURRENT_USER/AppEvents/EventLabels/Open]
@="打开程序"
"DispFileName"="@mmsys.cpl,-5839"

[HKEY_CURRENT_USER/AppEvents/EventLabels/PegConnectConfirm]
@="连接确认"

[HKEY_CURRENT_USER/AppEvents/EventLabels/PegDisconnectConfirm]
@="断开确认"

[HKEY_CURRENT_USER/AppEvents/EventLabels/PrintComplete]
@="完成打印"
"DispFileName"="@mmsys.cpl,-5840"

[HKEY_CURRENT_USER/AppEvents/EventLabels/RestoreDown]
@="向下还原"
"DispFileName"="@mmsys.cpl,-5841"

[HKEY_CURRENT_USER/AppEvents/EventLabels/RestoreUp]
@="向上还原"
"DispFileName"="@mmsys.cpl,-5842"

[HKEY_CURRENT_USER/AppEvents/EventLabels/SearchProviderDiscovered]
@="Search Provider Discovered"
"DispFileName"=hex(2):40,00,69,00,65,00,66,00,72,00,61,00,6d,00,65,00,2e,00,64,/
  00,6c,00,6c,00,2c,00,2d,00,31,00,32,00,35,00,31,00,33,00,00,00

[HKEY_CURRENT_USER/AppEvents/EventLabels/SecurityBand]
@="Information Bar"
"DispFileName"=hex(2):40,00,69,00,65,00,66,00,72,00,61,00,6d,00,65,00,2e,00,64,/
  00,6c,00,6c,00,2c,00,2d,00,31,00,30,00,33,00,32,00,36,00,00,00

[HKEY_CURRENT_USER/AppEvents/EventLabels/ShowBand]
@="Show Toolbar Band"
"DispFileName"=hex(2):40,00,69,00,65,00,66,00,72,00,61,00,6d,00,65,00,2e,00,64,/
  00,6c,00,6c,00,2c,00,2d,00,31,00,30,00,33,00,32,00,34,00,00,00

[HKEY_CURRENT_USER/AppEvents/EventLabels/SystemAsterisk]
@="警告信息"
"DispFileName"="@mmsys.cpl,-5843"

[HKEY_CURRENT_USER/AppEvents/EventLabels/SystemExclamation]
@="提示信息"
"DispFileName"="@mmsys.cpl,-5845"

[HKEY_CURRENT_USER/AppEvents/EventLabels/SystemExit]
@="退出 Windows"
"DispFileName"="@mmsys.cpl,-5846"

[HKEY_CURRENT_USER/AppEvents/EventLabels/SystemHand]
@="严重停止信息"
"DispFileName"="@mmsys.cpl,-5847"

[HKEY_CURRENT_USER/AppEvents/EventLabels/SystemNotification]
@="系统通知"
"DispFileName"="@mmsys.cpl,-5848"

[HKEY_CURRENT_USER/AppEvents/EventLabels/SystemQuestion]
@="疑问信息"
"DispFileName"="@mmsys.cpl,-5849"

[HKEY_CURRENT_USER/AppEvents/EventLabels/SystemStart]
@="启动 Windows"
"DispFileName"="@mmsys.cpl,-5850"

[HKEY_CURRENT_USER/AppEvents/EventLabels/VS_BreakpointHit]
@="Breakpoint Hit"

[HKEY_CURRENT_USER/AppEvents/EventLabels/VS_BuildCanceled]
@="Build Canceled"

[HKEY_CURRENT_USER/AppEvents/EventLabels/VS_BuildFailed]
@="Build Failed"

[HKEY_CURRENT_USER/AppEvents/EventLabels/VS_BuildSucceeded]
@="Build Succeeded"

[HKEY_CURRENT_USER/AppEvents/EventLabels/WindowsLogoff]
@="Windows 注销"
"DispFileName"="@mmsys.cpl,-5852"

[HKEY_CURRENT_USER/AppEvents/EventLabels/WindowsLogon]
@="Windows 登录"
"DispFileName"="@mmsys.cpl,-5853"

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值