cs_Cpapy
Messages postés133Date d'inscriptionmercredi 30 octobre 2002StatutMembreDernière intervention25 septembre 2007
-
9 avril 2007 à 15:40
cs_Cpapy
Messages postés133Date d'inscriptionmercredi 30 octobre 2002StatutMembreDernière intervention25 septembre 2007
-
10 avril 2007 à 19:14
Bonjour à tous,
Je voudrais écouter un fichier WAV en cliquant sur son nom dans l'explorateur Windows.
Le code ci-dessous marche correctement lorsqu'il est exécuté sous l'éditeur Visual Basic.
Lorsque je passe le nom du fichier dans l'explorateur à l'instruction Command$, ça ne marche plus.
'----------------------------------------------------------------------------------------------------------------------------------------
Private Declare Function SndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Const SND_ASYNC = &H1
Const SND_NODEFAULT = &H2
Private Sub Form_Load()
Filename = "D:\Applications - Icones\Sons\stdvgson20.wav" <----- Sous l'éditeur VB ça Marche
' Filename = Command$ <----- Sous l'Explorateur ça ne marche pas SndPlaySound Filename, SND_ASYNC Or SND_NODEFAULT
End Sub
'-----------------------------------------------------------------------------------------------------------------------------------------
A voir également:
Jouer un son en cliquant sur un fichier WAV de l'explorateur
cs_Cpapy
Messages postés133Date d'inscriptionmercredi 30 octobre 2002StatutMembreDernière intervention25 septembre 2007 10 avril 2007 à 19:14
C'est la troisième fois que j'essaie d'enregistrer ce message. Il sont tombés dans les oubliettes ? Le premier étais détaillé, le deuxième un peu mois et le troisième, celui si résumé. Je m'en excuse.
Merci pour le bout de code. je l'ai essayé mais rien a changé.
C'est notre amis Jmfmarques qui avait vu juste. Le contenu de l'instruction transmis par Command$ n'était pas valide. --> "C:\xxxxx.Wav" <-- les "" étaient en trop.
Je vous remercie pour le support que vous m'avez apporté, sans vous, je n'aurais pas encore solutionné mon problème.
Ci joint les quelques instructions de mon programme.
<hr />
Private Declare Function SndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Dim Filename As StringPrivate Sub Form_Load()
Filename = Replace(Command$, """", "") <-------------------------------------------
SndPlaySound Filename, 0
End
End Sub
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 9 avril 2007 à 15:56
Je comprends mal ce que tu veux dire
Quand tu es dans l'explorateur, tu n'es certes pas dans ton appli !
Comment passes-tu doinc le chemin du fichier cliqué dans l'explorateur à ton appli (le code) ?
cs_Cpapy
Messages postés133Date d'inscriptionmercredi 30 octobre 2002StatutMembreDernière intervention25 septembre 2007 9 avril 2007 à 16:52
Quand je suis dans mon programme je ne suis certe pas dans l'explorateur ?.... Cest l'explorateur qui lance mon programme. !
<hr />
Dans Windows j'ai affecté aux extensions WAV le Nom de mon Programme
(Dans l'explorateur: Outils - Options des Dossiers - Types de Fichier - Extension WAV Etc ..... J'ai
enregistré le Nom de mon Programme)
<hr />
Lorsque je clique sur un nom de fichier Wav, mon programme est lancé par l'explorateur et l'instruction
Command$
dans mon programme récupère ce nom de Fichier.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 9 avril 2007 à 18:04
Ouais...
même MSDN est d'accord avec moi...
Voilà son exemple :
This example uses the Command function to get the command line arguments in a function that returns them in a Variant containing an array.
Function GetCommandLine(Optional MaxArgs)
'Declare variables.
Dim C, CmdLine, CmdLnLen, InArg, I, NumArgs
'See if MaxArgs was provided.
If IsMissing(MaxArgs) Then MaxArgs = 10
'Make array of the correct size.
ReDim ArgArray(MaxArgs) NumArgs 0: InArg False
'Get command line arguments.
CmdLine = Command()
CmdLnLen = Len(CmdLine)
'Go thru command line one character
'at a time.
For I = 1 To CmdLnLen
C = Mid(CmdLine, I, 1)
'Test for space or tab.
If (C <> " " And C <> vbTab) Then
'Neither space nor tab.
'Test if already in argument.
If Not InArg Then
'New argument begins.
'Test for too many arguments.
If NumArgs = MaxArgs Then Exit For
NumArgs = NumArgs + 1
InArg = True
End If
'Concatenate character to current argument.
ArgArray(NumArgs) = ArgArray(NumArgs) & C
Else
'Found a space or tab.
'Set InArg flag to False.
InArg = False
End If
Next I
'Resize array just enough to hold arguments.
ReDim Preserve ArgArray(NumArgs)
'Return Array in Function name.
GetCommandLine = ArgArray()
End Function
cs_Cpapy
Messages postés133Date d'inscriptionmercredi 30 octobre 2002StatutMembreDernière intervention25 septembre 2007 9 avril 2007 à 18:15
Lorsque dans mon programme j'écrit:
dim Filename as string
Filename = Command$
je récupère bien le chemin et le Nom du fichier
que j'ai cliqué dans l'explorateur.
<hr />
Maintenant, ta solution marche certainement si tu le dis
Merci quand même pour tes réponses.
<hr />
Merci à celui qui aura la solution à mon problème
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 9 avril 2007 à 18:28
Bon.
Fais donc :
msgbox "A" & Filename & "B"
et dis-nous tout ce qui s'affiche, "A" et "B" étant inclus.
Il y a autre chose qui peut gêner la fonction SndPlaySound (mais ne gêne pas depuis l'Explorateur) : le nom du fichier (trop long ? des espaces ? des caractères accentués ?)
As-tu essayé de transformer FileName en nom court, pour voir ?
Remplace enfin FileName par nomfic car FileName est également le nom d'une propriété VB.
BLUEBIBUBBLE
Messages postés116Date d'inscriptionsamedi 4 juin 2005StatutMembreDernière intervention10 avril 20131 10 avril 2007 à 01:46
A mon avis on ne peux pas jouer en mode asynchrone (SND_ASYNC) sans charger les données du fichier en mémoire...
Est-ce que ça fonctionne avec SND_SYNC ?
BLUEBIBUBBLE
Messages postés116Date d'inscriptionsamedi 4 juin 2005StatutMembreDernière intervention10 avril 20131 10 avril 2007 à 17:05
Public Const SND_ASYNC As Long = &H1
Public Const SND_MEMORY As Long = &H4
Public Const SND_LOOP As Long = &H8
Public Const SND_PURGE As Long = &H40
Public Declare Function PlaySound Lib "winmm" Alias "PlaySoundA" _
(lpszSoundName As Any, ByVal hMod As Long, ByVal uFlags As Long) As Long
Public bytSound() As Byte 'Buffer a déclarer public au niveau module
Private Sub Form_Load() 'Ou n'importe ou ailleurs dans le code !!!
bytSound = LoadResData(101, "WAVE") 'Charger depuis une ressource
'(renommer la section "WAVE")
Open "pleindebruits.wav" For Binary As #1 'Charger depuis un fichier.wav
ReDim bytSound(LOF(1) - 1) 'Allouer la mémoire
Get #1, , bytSound 'Lire le son
Close #1 'Ferme le fichier
PlaySound bytSound(0), 0, SND_ASYNC + SND_MEMORY + SND_LOOP
End Sub
NOTE: Charger le fichier depuis une ressource ou depuis un fichier, mais pas les deux !!!