播放指定文件名、资源或系统事件的声音.
#Include <WinAPIEx.au3>
_WinAPI_PlaySound ( $sSound [, $iFlags [, $hInstance]] )
$sSound | 要播放的声音.最大长度为 255 个字符. 如果 $sSound 为空,则停止任何正在播放的波形声音 |
$iFlags | [可选参数] 声音播放的标志. 参数可以是一或多个下列值: $SND_APPLICATION --- $sSound 参数是注册表中的应用特定别名.结合 SND_ALIAS 或 SND_ALIAS_ID 标志指定应用程序定义的声音别名 $SND_ALIAS --- $sSound 参数是注册表或 Win.ini 文件中的系统事件别名.不要使用 SND_FILENAME 或 SND_RESOURCE $SND_ALIAS_ID --- $sSound 参数是预定义系统事件标识符的别名 $SND_ASYNC --- 异步播放声音,并在播放后立即返回到声音的起点 $SND_FILENAME --- $sSound 参数是一个文件名.指定如果文件无法找到,函数播放默认声音,除非 SND_NODEFAULT 标志被设置 $SND_LOOP --- 反复播放声音,直到 $sSound 参数设置位空.必须同时设置 SND_ASYNC 标志 $SND_MEMORY --- $sSound 参数指向加载内存中的声音 $SND_NODEFAULT --- 如果声音无法找到,使用默认声音事件 $SND_NOSTOP --- 指定的声音事件替换正在播放的声音事件 $SND_NOWAIT --- 不支持 $SND_PURGE --- 不支持 $SND_RESOURCE --- $sSound 参数是一个资源标识符 $SND_SYNC --- 声音同步播放 $SND_ALIAS, $SND_FILENAME 与 $SND_RESOURCE 3 个标志解释名称是否为系统事件、文件名、或资源标识符的别名. 如果没有指定这些标志,_WinAPI_PlaySound() 为指定的声音名搜索注册表或 WIN.INI 文件. 如果发现,则播放声音事件.如果注册表中未找到,则声音名字被解释为一个文件名. 如果 $iFlags 指定 $SND_ALIAS_ID,$sSound 参数必须是 $SND_ALIAS_* 值. (为了解更多信息,请参见 MSDN) |
$hInstance | [可选参数] 包含加载资源的可执行文件句柄.如果 $iFlags 不包含 $SND_RESOURCE,此参数将被忽略. |
成功: | 返回 1. |
失败: | 返回 0,并设置@error标志为非 0 值. |
在MSDN中搜索
#Include <APIConstants.au3>
#Include <WinAPIEx.au3>
Opt('MustDeclareVars', 1)
Global Const $sWav = @ScriptDir & '\Extras\Airplane.wav'
Global $hForm, $Msg, $Button, $bWav, $tWav, $pWav, $Play = False
; Read Airplane.wav to memory
$bWav = FileRead($sWav)
If @error Then
MsgBox(16, 'Error', 'Unable to read "' & $sWav & '"')
Exit
EndIf
$tWav = DllStructCreate('byte[' & BinaryLen($bWav) & ']')
DllStructSetData($tWav, 1, $bWav)
$pWav = DllStructGetPtr($tWav)
; 创建 GUI
$hForm = GUICreate('MyGUI', 200, 200)
$Button = GUICtrlCreateButton('Play', 70, 70, 60, 60)
GUISetState()
While 1
$Msg = GUIGetMsg()
Switch $Msg
Case -3
ExitLoop
Case $Button
$Play = Not $Play
If $Play Then
_WinAPI_PlaySound($pWav, BitOR($SND_ASYNC, $SND_LOOP, $SND_MEMORY))
GUICtrlSetData($Button, 'Stop')
Else
_WinAPI_PlaySound('')
GUICtrlSetData($Button, 'Play')
EndIf
EndSwitch
WEnd