播放windows\Media文件夹下的wav波形文件
问题来源:
这个标题不知道描述的清楚与否,这个是刚才群里的一位朋友问的问题。欢迎大家进群讨论问题:477266297问题如下:
SoundPlay(@WindowsDir & '\Media\Windows 注销声.wav')
用上面的代码运行后没有反应,但是下面这个可以播放:SoundPlay(@WindowsDir & '\Media\ir_begin.wav')
其实之前也遇到过类似问题,就像桌面、我的文档等文件夹,看上去是中文的,但其实真正的名字不是中文的。
那这里的Windows 注销声 其真正的名字是:Windows Logoff Sound.wav。
所以应该用SoundPlay(@WindowsDir & '\Media\Windows Logoff Sound.wav')来播放。===============================================================
分析过程:
其实windows系统的文件夹下都有个Desktop.ini配置文件,其实信息就在这里。所以打开C:\Windows\Media\Desktop.ini,可以看到如下信息(为方便看帖,只上少部分内容):
[LocalizedFileNames] chimes.wav=@%windir%\system32\mmres.dll,-700 chord.wav=@%windir%\system32\mmres.dll,-701 ding.wav=@%windir%\system32\mmres.dll,-702 ir_begin.wav=@%windir%\system32\mmres.dll,-703```
前面的名字是文件的真正的名字,后面才是windows显示的名字,是所指向的文件和文件资源的字符串id,就是要显示的文件名。
但是在去查看@%windir%\system32\mmres.dll这些文件时发现里面并没有字符串信息,这个因为有多国语言的影响,所以对应的应该在各个系统语言的文件夹下。
那么应该在C:\Windows\System32\zh-CN\mmres.dll.mui文件中,打开查看,果然在此。
===============================================================代码编写: Author:haijie1223 QQ29535065-http://www.jianyiit.com
```#NoTrayIcon #RequireAdmin ;~ #PRE_UseX64=n #include <array.au3> #include <WinAPIRes.au3> Global $ListName = IniReadSection(@WindowsDir & '\Media\Desktop.ini', 'LocalizedFileNames') Global $aArray, $hInstance For $i = 1 To $ListName[0][0] $ListName[$i][0] = @WindowsDir & '\Media\' & $ListName[$i][0] $ListName[$i][1] = StringRegExpReplace(StringReplace($ListName[$i][1], '@%windir%', @WindowsDir), '(?ims)(.*\\)(.*?\.\w{3})', '$1zh-CN\\$2.mui') $aArray = StringSplit($ListName[$i][1], ',-', 1) $ListName[$i][1] = _WinAPI_LoadStringEx($aArray[1], $aArray[2], Dec(@OSLang)) Assign(StringToBinary($ListName[$i][1]), $ListName[$i][0], 2) Next _ArrayDisplay($ListName) SoundSetWaveVolume(100) _udf_SoundPlay(@WindowsDir & '\Media\Windows 注销声.wav') Func _udf_SoundPlay($sFileName) $sFileName = StringRegExpReplace($sFileName, '.*\\(.*)', '$1') If StringRight($sFileName, 4) = '.wav' Or StringRight($sFileName, 4) = '.mid' Then $sFileName = StringTrimRight($sFileName, 4) If IsDeclared(StringToBinary($sFileName)) Then SoundPlay(Eval(StringToBinary($sFileName)), 1) EndFunc ;==>_udf_SoundPlay```
```
发表评论
木有头像就木JJ啦!还木有头像吗?点这里申请属于你的个性Gravatar头像吧!