2012-04-11 13 views
5

È possibile che un programma vb.net suoni l'altoparlante interno del PC? si conosce quello che produce C \a BELL Ho provato beep(), ma questo produce solo il suono di errore sulla scheda audio. Ho anche provatovb.net system beep sound su 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 

senza la gioia a quanto pare solo il suo bene su Vista e sopra. Qualche suggerimento?

+1

Sai che non tutti anche i computer * hanno * un altoparlante hardware integrato come quello che descrivi, giusto? Quindi questo programma probabilmente non funzionerà come previsto in un gran numero di casi, in particolare con le macchine economiche trovate negli ambienti aziendali. –

+1

Inoltre, questo Windows XP a 64 bit? Perché l'ultima volta che ricordo (è passato molto tempo da quando ho usato XP), la funzione ['Beep'] (http://msdn.microsoft.com/en-us/library/ms679277.aspx) ha causato l'emissione di un segnale acustico dall'altoparlante del sistema interno, come descrivi tu. Ciò è in contrasto con la funzione 'MessageBeep', che emetterebbe un beep dalla scheda audio se collegata. Le versioni a 64 bit di XP e Windows Vista sono state le prime a rompere questo comportamento. –

+0

Dannazione, sono su una versione a 64 bit ... suppongo che il mio utente debba solo indossare le cuffie ... Ta – Toby

risposta

3

Utilizzando lo spazio dei nomi My in VB.NET, è possibile accedere all'audio passando per My.Computer.Audio. Questo ha un metodo Play con un numero di sovraccarichi che consentono di trasmettere un suono .wav in base al file o come array Byte o Stream, ma ha anche un metodo PlaySystemSound che accetta uno enum, uno dei quali è Beep. Così la linea completa per giocare questo suono è:

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

Nessuna garanzia, ma in quanto è parte del framework .Net penso che questo dovrebbe lavoro su XP e Vista ...

+0

Questo dà solo il messaggio di avviso "doop" sulla scheda audio, grazie – Toby

+0

non ho una copia di Reflector a portata di mano, ma sarei disposto a scommettere che questa funzione avvolge semplicemente la funzione 'Beep' di Win32, che, come abbiamo già discusso, non funziona sulle versioni a 64 bit di Windows XP. Vedi anche: http://blogs.msdn.com/b/larryosterman/archive/2010/01/04/what-s-up-with-the-beep-driver-in-windows-7.aspx –

+0

@CodyGray It chiama MessageBeep in user32.dll – PhilPursglove