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

[Résolu]
Signaler
Messages postés
133
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
25 septembre 2007
-
Messages postés
133
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
25 septembre 2007
-
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

Messages postés
133
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
25 septembre 2007

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 />
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
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) ?
Messages postés
133
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
25 septembre 2007

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.
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
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
Messages postés
133
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
25 septembre 2007

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$
 
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
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 !
 
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Ouais...
Et je vois que je ne suis pas un cas isolé , ma foi !
http://www.devparadise.com/technoweb/code/vb/a268.php
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
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
Messages postés
133
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
25 septembre 2007

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
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
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.
Messages postés
133
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
25 septembre 2007

C'est bien pour te faire Plaisir
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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~
  
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
D'autant que personne n'attend une image !
Il nous suffit de la reproduction "manuelle" du texte .
Messages postés
116
Date d'inscription
samedi 4 juin 2005
Statut
Membre
Dernière intervention
10 avril 2013
1
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 ?
Messages postés
133
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
25 septembre 2007

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