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 的副本,但我敢打赌这个函数只是包装了 Win32 Beep 函数,正如我们已经讨论过的那样,它没有在 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 之间的远程注册表访问?

vb.net 2010日期格式和系统日期格式不一致,求解

vb.net 捕获系统音频流

VB.Net 2010中 ./和../的含义

WIN7系统 VB.NET2008 连接数据库ACCESS2007 提示未找到提供程序 该程序未正确安装

Vb.net WebClient.DownloadFileAsync 在 xp 和 8.1 上不起作用