Jouer un son en cliquant sur un fichier WAV de l'explorateur

Résolu
cs_Cpapy Messages postés 133 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 25 septembre 2007 - 9 avril 2007 à 15:40
cs_Cpapy Messages postés 133 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 25 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
'-----------------------------------------------------------------------------------------------------------------------------------------

16 réponses

cs_Cpapy Messages postés 133 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 25 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

<hr />

<hr />
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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) ?
0
cs_Cpapy Messages postés 133 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 25 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.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
9 avril 2007 à 17:29
Bonjour,

C'est précisément le code de cette instruction "Command$" qui nous en dira plus !


Ainsi que ce qui a été mis par Outils - Options des Dossiers - Types de Fichier - Extension WAV  pour cette extension
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Cpapy Messages postés 133 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 25 septembre 2007
9 avril 2007 à 17:44
Regardes le petit programme qui se trouve dans ma question initiale et je pense que tu comprendras.
Tu ne connais peut-être pas l'instruction Command$
 
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
9 avril 2007 à 17:58
Excuse-moi, mais, dans le petit bout de code de ton premier message, je ne vois rien qui ressemblerait à :
CmdLine = Command()


car c'est ainsi que je l'utilise, moi, cette fonction (en tout cas avec VB5) qui a pour objet d'aller récupérer le valeur d'un argument d'entrée !
 
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
9 avril 2007 à 18:01
Ouais...
Et je vois que je ne suis pas un cas isolé , ma foi !
http://www.devparadise.com/technoweb/code/vb/a268.php
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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
0
cs_Cpapy Messages postés 133 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 25 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
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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.
0
cs_Cpapy Messages postés 133 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 25 septembre 2007
9 avril 2007 à 18:59
C'est bien pour te faire Plaisir
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
9 avril 2007 à 19:17
CPapy,

il faut héberger les images, celles sur ta machine ne s'afficheront pas pour nous, seul toi la verra  ;)

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
9 avril 2007 à 20:09
D'autant que personne n'attend une image !
Il nous suffit de la reproduction "manuelle" du texte .
0
BLUEBIBUBBLE Messages postés 116 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 10 avril 2013 1
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 ?
0
cs_Cpapy Messages postés 133 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 25 septembre 2007
10 avril 2007 à 09:56
Bonjour,

J'ai essayé avec SND_SYNC mais ça ne marche toujours pas.

Comment fait-on pour charger les données en mémoire et  ensuite pour lancer SndPlaySound

Par avance merci.
0
BLUEBIBUBBLE Messages postés 116 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 10 avril 2013 1
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 !!! 
0
Rejoignez-nous