2012-04-11 73 views
5

是否有可能讓vb.net程序聽到PC內部揚聲器?你知道生產C的\a BELL 我試過beep(),但這隻會在聲卡上產生錯誤聲音。 我也曾嘗試vb.net系統在XP上發出嘟嘟聲

<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和以上良好。 有什麼建議嗎?

+1

你知道,並不是所有的電腦甚至*有一個內置的硬件揚聲器,如你所描述的,對吧?因此,該計劃在許多情況下可能無法達到預期的效果,特別是在企業環境中使用的廉價機器。 – 2012-04-11 17:29:53

+1

另外,這是64位的Windows XP?因爲最後我記得(自從我使用XP以來已經很長時間了),['Beep'函數](http://msdn.microsoft.com/zh-cn/library/ms679277.aspx)導致發出嘟嘟聲來自內部系統揚聲器,就像你描述的那樣。這與'MessageBeep'功能形成了鮮明對比,如果連接聲卡,它將從聲卡發出蜂鳴聲。 XP和Windows Vista的64位版本是第一個打破這種行爲的。 – 2012-04-11 17:33:20

+0

該死的我在一個64位版本......猜測我的用戶將只需要戴上耳機...... Ta – Toby 2012-04-11 17:36:57

回答

3

使用VB.NET中的My命名空間,您可以通過My.Computer.Audio訪問音頻。這有一個Play方法與一些重載,允許您通過文件位置傳遞.wav聲音或作爲字節數組或流,但它也有一個PlaySystemSound方法,其中需要enum,其中之一是Beep。因此全線玩這個聲音是:

My.Computer.Audio.PlaySystemSound(Media.SystemSounds.Beep) 

沒有保證,但因爲它是.NET框架的一部分,我想在XP和Vista這個應該工作...

+0

這隻給出聲卡上的警告信息「doop」,雖然 – Toby 2012-04-11 17:41:05

+0

我沒有一個Reflector方便的副本,但我願意打賭,該函數只是封裝了Win32'Beep'函數,正如我們已經討論過的那樣,它不適用於64位版本的Windows XP。另見:http://blogs.msdn.com/b/larryosterman/archive/2010/01/04/what-s-up-with-the-beep-driver-in-windows-7.aspx – 2012-04-11 17:41:38

+0

@CodyGray It在user32.dll中調用MessageBeep – PhilPursglove 2012-04-11 17:50:36

相關問題