1

我的声明如下:

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 是我表单上的一个文本框,我用它来试验不同的声音别名。

它适用于 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

我用谷歌搜索了几个小时,但仍然没有解决方案。非常感谢你的帮助!

戴维德

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

4

1 回答 1

0

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

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

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

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

  • 由于您不想在程序中包含多个文件,您可以将声音作为资源嵌入到应用程序中,并使用 SND_RESOURCE 标志来播放它。我会注意到,如果用户在控制面板中更改了导航声音,那么如果您这样做,您的声音将不匹配。

于 2012-09-08T14:59:33.903 回答