vb.net系统在XP上的提示音
Posted
技术标签:
【中文标题】vb.net系统在XP上的提示音【英文标题】:vb.net system beep sound on XP 【发布时间】:2012-04-11 17:26:28 【问题描述】:是否可以让 vb.net 程序使 PC 的内部扬声器发出声音?你知道那个产生 C 的\a
BELL
我试过beep()
,但这只会在声卡上产生错误声音。
我也试过了
<Runtime.InteropServices.DllImport("KERNEL32.DLL", EntryPoint:="Beep", SetLastError:=True, _
CharSet:=Runtime.InteropServices.CharSet.Unicode, ExactSpelling:=True, _
CallingConvention:=Runtime.InteropServices.CallingConvention.StdCall)> _
Public Shared Function _
aBeep(ByVal dwFreq As Integer, ByVal dwDuration As Integer) _
As Boolean
End Function
显然它在 Vista 及更高版本上的唯一好处是没有任何乐趣。 有什么建议吗?
【问题讨论】:
您知道并非所有计算机都拥有您所描述的那种内置硬件扬声器,对吧?因此,在很多情况下,该程序可能无法按预期执行,尤其是在企业环境中使用廉价机器时。 另外,这是 64 位 Windows XP 吗?因为上次我记得(我已经很久没有使用 XP 了),Beep
function 导致内部系统扬声器发出哔哔声,就像你描述的那样。这与MessageBeep
功能形成对比,如果连接,它会从声卡发出蜂鸣声。 64 位版本的 XP 和 Windows Vista 率先打破了这种行为。
该死,我是 64 位版本...猜我的用户只需要戴耳机... Ta
【参考方案1】:
使用 VB.NET 中的 My
命名空间,您可以通过 My.Computer.Audio
访问音频。这有一个Play
方法,带有许多重载,允许您通过文件位置或作为字节数组或流传递.wav 声音,但它也有一个PlaySystemSound
方法,它采用enum,一个其中是Beep
。所以播放这个声音的完整行是:
My.Computer.Audio.PlaySystemSound(Media.SystemSounds.Beep)
没有保证,但由于它是 .Net 框架的一部分,我认为这应该适用于 XP 和 Vista...
【讨论】:
这只会在声卡上给出警告消息“doop”,不过谢谢 我手边没有 Reflector 的副本,但我敢打赌这个函数只是包装了 Win32Beep
函数,正如我们已经讨论过的那样,它没有在 64 位版本的 Windows XP 上工作。另请参阅:blogs.msdn.com/b/larryosterman/archive/2010/01/04/…
@CodyGray 在 user32.dll 中调用 MessageBeep
啊,是的。映射到参数0xFFFFFFFF
,如文档here 中所述。这将与Beep
做同样的事情。 MessageBeep
函数只是该函数的扩展版本。不幸的是,这也证实了它不起作用。 :-)
为了搅浑水,我今天搭建了一个 64 位 XP Pro 虚拟机来试一试。如果 Beep
在 64 位上不受支持,我预计它会抛出 PlatformNotSupportedException
,但正如 @Toby 所说,它只是通过声卡工作。以上是关于vb.net系统在XP上的提示音的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 vb.net 访问 xp 和 vista 之间的远程注册表访问?