使用winmm.dll库从VB6应用程序播放Internet Explorer系统声音

时间:2012-08-18 12:00:53

标签: vb6

我的声明是:

Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName _
As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long

我正在使用代码:

PlaySound Text2.Text, 0, &H1

Text2是我的Form上的一个文本框,我用它来试验不同的声音别名。

适用于Windows默认声音(别名如“SystemAsterisk”,“SystemStart”,“WindowsLogOn”,“DeviceConnect”等等),但如何让我的应用程序播放资源管理器声音?

在注册表中,默认声音的存储方式如下:

HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\DeviceConnect\.Default

如果我将“DeviceConnect”传递给Playsound功能,它会播放正确的声音。但是,如何才能获得存储在树的其他分支中的声音?例如:

HKEY_CURRENT_USER\AppEvents\Schemes\Apps\Explorer\Navigating\.Default
我用Google搜索了几个小时,但仍无法解决问题。非常感谢你的帮助!

的Davide

PS:我知道我可以将我想要的声音复制到我的应用程序文件夹中,但我正在尝试勾选单个可执行文件以便于分发。

1 个答案:

答案 0 :(得分:0)

您拥有的导航示例是特定于应用程序的声音。不幸的是,您可以传递给PlaySound()调用的SND_APPLICATION标志只适用于您的应用程序。

有几种方法可以在您自己的应用程序中播放此声音:

  • 从注册表中读取文件名并将声音播放为文件。

  • 在注册表中创建您自己的特定于应用程序的定义(从Explorer注册表项复制文件名)并使用SND_APPLICATION和SND_ALIAS标志来播放它。如果您始终希望程序与Explorer版本匹配,则必须在每次程序启动时设置reg值。

  • 由于您不希望在程序中包含多个文件,因此您可以将声音作为资源嵌入应用程序中,并使用SND_RESOURCE标志来播放它。我会注意到,如果用户更改了“控制面板”中的“导航”声音,则执行此操作时声音将不匹配。