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

使用winmm.dll库从VB6应用程序播放Internet Explorer系统声音,vb6,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是我表单上的一个文本框,我用它来试验不同的声音别名 它适用于Windows默认声音

我的声明是:

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:我知道我可以将我想要的声音复制到我的应用程序文件夹中,但我正在尝试选择单个可执行文件以便于分发。

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

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

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

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

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


你好,迈克,谢谢你的精彩回复!非常清楚和详尽!对不起,我花了很长时间才接受!我尝试了您提到的第一个解决方案,但我的结果在不同平台上并不一致。我一定犯了一些错误。我将尝试第3个,它看起来是最直接的,我当然不希望它改变,因为用户改变了设置。谢谢!附言:任何关于如何做选项3的进一步建议都是非常受欢迎的!