我想在我的应用程序中使用.NET代码播放系统声音 - 如果我想使用Beep
,Asterisk
等我没问题:
My.Computer.Audio.PlaySystemSound(Media.SystemSounds.Asterisk)
但是如果我想玩'菜单弹出'这样的话怎么办?默认情况下,此声音在Windows默认声音方案中关闭,但如果用户将此声音设置为执行某些操作,则我想播放它。
用户可以为此操作分配任何wav文件,因此我想找到他们分配的声音(如果有的话)并播放它。与Windows版本的兼容性也很重要。
播放它当然不是问题,因为我可以使用:
My.Computer.Audio.Play(strWAVFile)
所以问题在于如何找到它。
答案 0 :(得分:1)
系统事件的wave声音文件存储在系统注册表中,自Windows 95以来它们一直存在,因此兼容性不是问题。
检查此注册表项以查找为事件播放的声音:
HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default
对于“菜单弹出”,就像你说的那样,你可以从这个注册表项中读取默认值:
HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\MenuPopup\.Current
所以你会写这样的代码:
Dim rk = Registry.CurrentUser.OpenSubKey("AppEvents\Schemes\Apps\.Default\" & _
"MenuPopup\.Current")
Dim soundFile = rk.GetValue("")
If soundFile <> "" Then
My.Computer.Audio.Play(soundFile)
End If
我在播放之前检查了soundFile
变量是否为空,因为并非每个事件都有与之关联的声音,并且您不希望应用程序因为无法找到的声音文件而停止工作。 / p>
答案 1 :(得分:0)
假设Windows默认媒体文件夹位于 C\Windows\Media
默认情况下,您只需播放Windows附带的任何声音。
My.Computer.Audio.Play("c:\windows\media\alarm01.wav", AudioPlayMode.Background)
安装新的Windows并打开Media文件夹。
编码时要注意目标窗口兼容性。