none
Comment activer et régler le son automatiquement ? RRS feed

Réponses

  • Salut EhJoe,

    Cela fait bien longtemps ;)

    Si je comprends bien, tu veux activer le son de Windows si celui-ci est 'Muté' et mettre le volume à 30% ?
    Chez moi, je viens de tester ceci :

    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)
    
        Private Sub Button1Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            ' On descend le volume à zéro
            For i = 1 To 100
                keybd_event(Windows.Forms.Keys.VolumeDown, 255, 0, 0)
                keybd_event(Windows.Forms.Keys.VolumeDown, 0, 0, 0)
            Next
    
            ' Si le son est muté on unmute
            keybd_event(Windows.Forms.Keys.VolumeMute, 0, 0, 0)
    
            ' On augmente le volume suivant le nombre de boucles
            For i = 1 To 12 ' 12 est égal à ~50%
                keybd_event(Windows.Forms.Keys.VolumeUp, 1, 0, 0)
                keybd_event(Windows.Forms.Keys.VolumeUp, 0, 0, 0)
            Next
        End Sub

    Je ne dois surement pas t'avoir compris. Cela m'a l'air trop simple !

    Bien à toi.


    ZGuideTV.NET - administrator/developer

    • Marqué comme réponse EhJoe vendredi 28 septembre 2012 08:29
    jeudi 27 septembre 2012 20:48

Toutes les réponses

  • Bonjour Joseph,

    Voici un lien qui devrait normalement vous aider :

    http://support.microsoft.com/kb/178456

    Si vous avez besoin d'aide, je serais disponible ce soir pour faire un exemple.


    Cordialement


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !

    lundi 24 septembre 2012 08:24
  • Bonsoir Lyamine,

    Merci,

    Voici le projet en vb6 zipé, ici :

    http://mesromans.free.fr/son.zip

    Mais il ne fonctionne pas, en plus c'est du VB6...

    Au plaisir, cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    lundi 24 septembre 2012 18:17
  • Bonsoir Lyamine,

    Merci,

    Voici le projet en vb6 zipé, ici :

    http://mesromans.free.fr/son.zip

    Mais il ne fonctionne pas, en plus c'est du VB6...

    Au plaisir, cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    Bonsoir,

    Je n'ai pas VB6, mais je vais regarder pour le faire en .Net. Est-ce que ça vous irait  ?

    (Ajout)

    Autant pour moi, c'était un lien avec du vb6


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !


    • Modifié Lyamine lundi 24 septembre 2012 21:07
    lundi 24 septembre 2012 20:41
  • Bonsoir, suite,

    Ah oui, si tu arrives à le faire en vbNet, mais juste une procédure avec (activation et réglage du volume sonore) seulement, le reste ne m'interssse pas en fait.

    Merci, au plaisir, cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    lundi 24 septembre 2012 21:55
  • Ok pas de soucis.

    Sinon j'ai trouvé ceci, http://winmm.codeplex.com/

    Est-ce qu'il vous convient ?

    (je fini de mon coté le code si besoin et par envie, j'étais rentré tard)


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !



    • Modifié Lyamine mardi 25 septembre 2012 00:02
    lundi 24 septembre 2012 23:31
  • Bonjour Lyamine,

    Merci, mais la page à laquelle tu me renvoies est écrite en "anglais" (I do not undestand)...

    Oui, je veux bien ton code alors, juste le code minimum en "PROCEDURE" pour activer et le volume et le caler à une valeur x, juste ça  :o)

    Pour l'envoi, vois s'il te plaît en dessous de ce message ma signature, tu trouveras de quoi me contacter par mail.

    En te remerciant encore et au plaisir, cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    mardi 25 septembre 2012 06:03
  • Bonjour Lyamine,

    Merci, mais la page à laquelle tu me renvoies est écrite en "anglais" (I do not undestand)...

    Oui, je veux bien ton code alors, juste le code minimum en "PROCEDURE" pour activer et le volume et le caler à une valeur x, juste ça  :o)

    Pour l'envoi, vois s'il te plaît en dessous de ce message ma signature, tu trouveras de quoi me contacter par mail.

    En te remerciant encore et au plaisir, cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    Bonjour Joseph,

    Et bien de mon coté la récupération d'information sur le Volume à fonctionné. Dès que j'ai du temps dans la journée, je termine le code pour l'affection du volume sinon se sera ce soir. Ok, je te contacterais par mail et je mettrais le code pour les autres.


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !

    mardi 25 septembre 2012 06:07
  • Bonsoir,

    Voici ce que j'ai fait pour le moment :

    Imports System.Runtime.InteropServices
    
    
    
    Public Class Form1
        Private phMx As IntPtr
        Private ptr As IntPtr
        Private isOpened As MMRESULT
        Private isClosed As MMRESULT
        Private volumCtrl As MIXERCONTROL
    
        Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
            If isOpened = MMRESULT.MMSYSERR_NOERROR Then
                isClosed = mixerClose(Me.phMx)
            End If
        End Sub
    
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            ptr = Marshal.AllocHGlobal(4) 'allouer un secteur pour récupérer le handle de mixer
    
            isOpened = mixerOpen(ptr, 0, IntPtr.Zero, IntPtr.Zero, False) 'ouverture du mixer
    
            If isOpened = MMRESULT.MMSYSERR_NOERROR Then
                phMx = Marshal.ReadIntPtr(ptr) 'lecture du pointer dans le pointer ;)
                Marshal.FreeHGlobal(ptr) 'libérer ce pointer car nous avons lu la valeur de handle de mixer
                volumCtrl = GetVolumeControl()
    
            Else
                MessageBox.Show(String.Format("Erreur d'ouverture du contrôleur son : " _
                                              + vbCrLf + "{0}", isOpened), _
                                                "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
    
        End Sub
    
        Private Function GetVolumeControl() As MIXERCONTROL
            Dim mxlResult As MMRESULT
            Dim mxl As MIXERLINE = New MIXERLINE()
            mxl._Target = New Target()
    
            mxl.cbStruct = Marshal.SizeOf(mxl)
            mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS
            mxl.dwDestination = MIXERCONTROL_CONTROLTYPE_VOLUME
            Dim mxlPtr As IntPtr = Marshal.AllocHGlobal(mxl.cbStruct)
            Marshal.StructureToPtr(mxl, mxlPtr, True)
    
            mxlResult = mixerGetLineInfo(phMx, mxlPtr, MIXER_GETLINEINFOF_COMPONENTTYPE)
    
            If mxlResult = MMRESULT.MMSYSERR_NOERROR Then
                'récupération d'info
                mxl = DirectCast(Marshal.PtrToStructure(mxlPtr, mxl.GetType()), MIXERLINE)
                Marshal.FreeHGlobal(mxlPtr)
    
                'afficher le nom du périphérique audio dans listbox
                _ListInfo.Items.Clear()
                _ListInfo.Items.Add(String.Concat(mxl.szName))
                _ListInfo.Items.Add(String.Concat(mxl.szShortName))
    
                Dim mxlc As MIXERLINECONTROLS = New MIXERLINECONTROLS()
                mxlc.union = New MIXERLINECONTROLS_union()
                Dim volCtrl As MIXERCONTROL = New MIXERCONTROL() 'utilisé pour avoir la taille de la structure :/
    
                mxlc.cbStruct = Marshal.SizeOf(mxlc)
                mxlc.dwLineID = mxl.dwLineID
                mxlc.union.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME
                mxlc.cControls = 1
                mxlc.cbmxctrl = Marshal.SizeOf(volCtrl.GetType())
                mxlc.pamxctrl = Marshal.AllocHGlobal(4)
    
                Dim mxlcPtr As IntPtr = Marshal.AllocHGlobal(mxlc.cbmxctrl)
                Marshal.StructureToPtr(mxlc, mxlcPtr, True)
    
                Dim mxlcResult As MMRESULT
                mxlcResult = mixerGetLineControls(phMx, mxlcPtr, MIXER_GETLINECONTROLSF_ONEBYTYPE)
                If mxlResult = MMRESULT.MMSYSERR_NOERROR Then
                    'récupération d'info
                    mxlc = DirectCast(Marshal.PtrToStructure(mxlcPtr, mxlc.GetType()), MIXERLINECONTROLS)
    
                    Dim mxc As MIXERCONTROL = New MIXERCONTROL()
                    mxc = DirectCast(Marshal.PtrToStructure(mxlc.pamxctrl, mxc.GetType()), MIXERCONTROL)
    
                    'Marshal.FreeHGlobal(mxlPtr)
                    Return mxc
                Else
                    Marshal.FreeHGlobal(mxlPtr)
    
                    MessageBox.Show(String.Format("Erreur d'ouverture du contrôleur son : " _
                                                  + vbCrLf + "{0}", isOpened), _
                                                    "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
                    Return Nothing
                End If
    
    
            Else
                Marshal.FreeHGlobal(mxlPtr)
    
                MessageBox.Show(String.Format("Erreur d'ouverture du contrôleur son : " _
                                              + vbCrLf + "{0}", isOpened), _
                                                "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
                Return Nothing
            End If
    
        End Function
    
        Private Sub setVolume(volume As Integer)
            Dim mxcd As MIXERCONTROLDETAILS = New MIXERCONTROLDETAILS()
            mxcd.union = New MIXERCONTROLDETAILS_union()
            Dim vol As MIXERCONTROLDETAILS_UNSIGNED = New MIXERCONTROLDETAILS_UNSIGNED()
            Dim volPtr As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(vol))
            Dim mxcdPtr As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(mxcd))
            Dim result As MMRESULT
    
            vol.dwValue = volume
    
            Marshal.StructureToPtr(vol, volPtr, True)
    
            mxcd.dwControlID = volumCtrl.dwControlID
            mxcd.union.hwndOwner = IntPtr.Zero
            mxcd.union.cMultipleItems = 0
            mxcd.cbStruct = Marshal.SizeOf(mxcd)
            mxcd.cbDetails = Marshal.SizeOf(vol)
            mxcd.cChannels = 1
            mxcd.paDetails = volPtr
    
            Marshal.StructureToPtr(mxcd, mxcdPtr, True)
    
            result = mixerSetControlDetails(phMx, mxcdPtr, 0) 'MIXER_SETCONTROLDETAILSF_VALUE = 0 ---> googled it !
            MessageBox.Show(result.ToString())
            Marshal.FreeHGlobal(mxcdPtr)
            Marshal.FreeHGlobal(volPtr)
    
        End Sub
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            setVolume(60000) 'de 0 à 65535
        End Sub
    End Class
    

    Module :

    Imports System.Runtime.InteropServices
    
    Module Winmm
        Public Const MAXPNAMELEN As Integer = 32
        Public Const MIXER_LONG_NAME_CHARS As Integer = 64
        Public Const MIXER_SHORT_NAME_CHARS = 16
        Public Const MIXER_GETLINEINFOF_COMPONENTTYPE As Integer = &H3&
        Public Const MIXER_GETCONTROLDETAILSF_VALUE As Integer = &H0&
        Public Const MIXER_GETLINECONTROLSF_ONEBYTYPE As Integer = &H2&
        Public Const MIXERLINE_COMPONENTTYPE_DST_FIRST As Integer = &H0&
        Public Const MIXERLINE_COMPONENTTYPE_SRC_FIRST As Integer = &H1000&
    
        Public Const MIXERLINE_COMPONENTTYPE_DST_SPEAKERS As Integer = _
                       (MIXERLINE_COMPONENTTYPE_DST_FIRST + 4)
    
        Public Const MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE As Integer = _
                       (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 3)
    
        Public Const MIXERLINE_COMPONENTTYPE_SRC_LINE As Integer = _
                       (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 2)
    
        Public Const MIXERCONTROL_CT_CLASS_FADER As Integer = &H50000000
        Public Const MIXERCONTROL_CT_UNITS_UNSIGNED = &H30000
    
        Public Const MIXERCONTROL_CONTROLTYPE_FADER As Integer = _
                       (MIXERCONTROL_CT_CLASS_FADER Or _
                       MIXERCONTROL_CT_UNITS_UNSIGNED)
    
        Public Const MIXERCONTROL_CONTROLTYPE_VOLUME As Integer = _
                       (MIXERCONTROL_CONTROLTYPE_FADER + 1)
    
        Public Enum MMRESULT
            MMSYSERR_NOERROR = 0
            MMSYSERR_ERROR = 1
            MMSYSERR_BADDEVICEID = 2
            MMSYSERR_NOTENABLED = 3
            MMSYSERR_ALLOCATED = 4
            MMSYSERR_INVALHANDLE = 5
            MMSYSERR_NODRIVER = 6
            MMSYSERR_NOMEM = 7
            MMSYSERR_NOTSUPPORTED = 8
            MMSYSERR_BADERRNUM = 9
            MMSYSERR_INVALFLAG = 10
            MMSYSERR_INVALPARAM = 11
            MMSYSERR_HANDLEBUSY = 12
            MMSYSERR_INVALIDALIAS = 13
            MMSYSERR_BADDB = 14
            MMSYSERR_KEYNOTFOUND = 15
            MMSYSERR_READERROR = 16
            MMSYSERR_WRITEERROR = 17
            MMSYSERR_DELETEERROR = 18
            MMSYSERR_VALNOTFOUND = 19
            MMSYSERR_NODRIVERCB = 20
            WAVERR_BADFORMAT = 32
            WAVERR_STILLPLAYING = 33
            WAVERR_UNPREPARED = 34
        End Enum
    
        Public Structure MIXERLINE
            Public cbStruct As Integer
            Public dwDestination As Integer
            Public dwSource As Integer
            Public dwLineID As Integer
            Public fdwLine As Integer
            Public dwUser As IntPtr
            Public dwComponentType As Integer
            Public cChannels As Integer
            Public cConnections As Integer
            Public cControls As Integer
            <MarshalAs(UnmanagedType.ByValArray, SizeConst:=MIXER_SHORT_NAME_CHARS)> _
            Public szShortName As Char()
            <MarshalAs(UnmanagedType.ByValArray, SizeConst:=MIXER_LONG_NAME_CHARS)> _
            Public szName As Char()
            Public _Target As Target
        End Structure
    
        Public Structure Target
            Public dwType As Integer
            Public dwDeviceID As Integer
            Public wMid As Integer
            Public wPid As Integer
            Public vDriverVersion As Integer
            <MarshalAs(UnmanagedType.ByValArray, SizeConst:=MAXPNAMELEN)> _
            Public szPname As Char()
        End Structure
    
    
        Public Structure MIXERCONTROLDETAILS
            Public cbStruct As Integer
            Public dwControlID As Integer
            Public cChannels As Integer
            Public union As MIXERCONTROLDETAILS_union
            Public cbDetails As Integer
            Public paDetails As IntPtr
        End Structure
    
        Structure MIXERCONTROLDETAILS_UNSIGNED
            Public dwValue As UInteger
        End Structure
    
        Public Structure MIXERCONTROLDETAILS_union
            Public hwndOwner As IntPtr
            Public cMultipleItems As Integer
        End Structure
    
        Public Structure MIXERLINECONTROLS
            Public cbStruct As Integer
            Public dwLineID As Integer
            Public union As MIXERLINECONTROLS_union
            Public cControls As Integer
            Public cbmxctrl As Integer
            Public pamxctrl As IntPtr
        End Structure
    
        Public Structure MIXERLINECONTROLS_union
            Public dwControlType As Integer
        End Structure
    
        Structure MIXERCONTROL
            Public cbStruct As Integer
            Public dwControlID As Integer
            Public dwControlType As Integer
            Public fdwControl As Integer
            Public cMultipleItems As Integer
            <MarshalAs(UnmanagedType.ByValArray, SizeConst:=MIXER_SHORT_NAME_CHARS)> _
            Public szShortName As Char()
            <MarshalAs(UnmanagedType.ByValArray, SizeConst:=MIXER_LONG_NAME_CHARS)> _
            Public szName As Char()
            Public Bounds As MIXERCONTROL_Bounds
            Public Metrics As MIXERCONTROL_Metrics
        End Structure
    
        Structure MIXERCONTROL_Bounds
            Public lMinimum As Long
            Public lMaximum As Long
            Public cSteps As Integer
            Public cbCustomData As Integer
            <MarshalAs(UnmanagedType.ByValArray, SizeConst:=6)> _
            Public dwReserved As Integer()
        End Structure
    
        Structure MIXERCONTROL_Metrics
            Public cSteps As Integer
            Public cbCustomData As Integer
            <MarshalAs(UnmanagedType.ByValArray, SizeConst:=6)> _
            Public dwReserved As Integer()
        End Structure
        <DllImport("Winmm.dll")> _
        Function mixerOpen(phmx As IntPtr, uMxId As UInt32, dwCallback As IntPtr, dwInstance As IntPtr, fdwOpen As Integer) As MMRESULT
        End Function
    
        <DllImport("Winmm.dll")> _
        Function mixerClose(phmx As IntPtr) As MMRESULT
        End Function
    
        <DllImport("Winmm.dll")> _
        Function mixerGetLineInfo(phmx As IntPtr, pmxl As IntPtr, fdwInfo As Integer) As MMRESULT
        End Function
    
    
        <DllImport("Winmm.dll")> _
        Function mixerSetControlDetails(phmx As IntPtr, pmxcd As IntPtr, fdwDetails As Integer) As MMRESULT
        End Function
    
        <DllImport("Winmm.dll")> _
        Function mixerGetLineControls(phmx As IntPtr, pmxlc As IntPtr, fdwControls As Integer) As MMRESULT
        End Function
    
    
    End Module
    

    Comme je suis super occupé cette semaine, je finirais dès que possible. Il ne me reste plus que l'affectation du volume. J'ai une erreur de type INVALID_PARAM (en gros).


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !

    mardi 25 septembre 2012 22:51
  • Bonjour, suite

    Ben j'attendrais, pas de problème, mais... tu es certain qu'il faut tout ce code pour (activer le volume et le mettre à 20) par exemple ?

    Et tant qu'à faire, mettre tout dans une form, comme ça on met une nouvelle form et on y fait appel avec des variables public, au lieu d'avoir une form et un module...

    Car ma question c'est : activer le volume du haut-parleur d'autorité et le mettre à une valeur x, c'est tout, pas davantage.

    Si tu veux faire un traitement complet sans doute faut-il le mettre ailleurs dans les exemples, et juste mettre le code ici concernant ma question...

    Au plaisir, cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire



    • Modifié EhJoe mercredi 26 septembre 2012 06:35
    mercredi 26 septembre 2012 06:30
  • Bonjour, suite

    Ben j'attendrais, pas de problème, mais... tu es certain qu'il faut tout ce code pour (activer le volume et le mettre à 20) par exemple ?

    Car ma question c'est : activer le volume du haut-parleur d'autorité et le mettre à une valeur x, c'est tout, pas davantage.

    Si tu veux faire un traitement complet sans doute faut-il le mettre ailleurs dans les exemples, et juste mettre le code ici concernant ma question...

    Au plaisir, cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    Bonjour,

    Oui il faut déjà récupérer les informations du périphérique concerné avant de faire l'affectation de volume. Ce que je vais faire à la rigueur c'est d'utiliser le framework winmm du lien que je t'ai fourni. Ça ira plus vite. Sa ne pose pas de problème si il y a une dll en plus ?


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !

    mercredi 26 septembre 2012 06:38
  • suite...

    Non, un DLL en plus ne pose pas de problème à partir du moment où on peut la posséder facilement, et donc la mettre dans les ressources pour simplement la coller dans le répertoire de l'exe au premier lancement , chat marche :o)

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    mercredi 26 septembre 2012 07:26
  • suite...

    Non, un DLL en plus ne pose pas de problème à partir du moment où on peut la posséder facilement, et donc la mettre dans les ressources pour simplement la coller dans le répertoire de l'exe au premier lancement , chat marche :o)

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    OK et bien dès ce soir, je prend leur projet et je code pour faire le test. A la rigueur je vais reprendre le source et l'intégrer directement au projet.


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !

    mercredi 26 septembre 2012 08:24
  • Lyamine,

    J'ai intégré le code en vb6 (j'ai vb6.pro), mais ça ne marchait pas, je n'en suis même pas étonné d'ailleurs, avec autant de code pour une si petite fonction, c'est rare que ça tourne du premier coup. Ce que je t'ai zipé est du vb6 d'origine, mais je doute que l'éditeur de vbNet sâche le retaper en vbNet, hum...

    Je n'y connais rien en la matière, étant très mal à l'aise avec les fonctions et encore davantage avec l'utilisation des DLL (faute d'avoir appris à en faire), toutefois je reste étonné que vbNet, framWork ne gère pas ça un peu mlieux qu'en vb6, du genre : 

    dim r as integer = call fonctionVolume(boolean, byte)

    Dommage... j'ai juste besoin de ça moi. Enfin, pouvu que chat marche c'est le principal...

    Au plaisir, et encore merci, cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    mercredi 26 septembre 2012 11:05
  • Lyamine,

    J'ai intégré le code en vb6 (j'ai vb6.pro), mais ça ne marchait pas, je n'en suis même pas étonné d'ailleurs, avec autant de code pour une si petite fonction, c'est rare que ça tourne du premier coup. Ce que je t'ai zipé est du vb6 d'origine, mais je doute que l'éditeur de vbNet sâche le retaper en vbNet, hum...

    Je n'y connais rien en la matière, étant très mal à l'aise avec les fonctions et encore davantage avec l'utilisation des DLL (faute d'avoir appris à en faire), toutefois je reste étonné que vbNet, framWork ne gère pas ça un peu mlieux qu'en vb6, du genre : 

    dim r as integer = call fonctionVolume(boolean, byte)

    Dommage... j'ai juste besoin de ça moi. Enfin, pouvu que chat marche c'est le principal...

    Au plaisir, et encore merci, cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    Oui c'est du VB6, moi parle du code http://winmm.codeplex.com qui est en C#. je reprends la référence et code un exemple. En espérant qu'il soit complet et simple d'utilisation et non une usine à gaz.


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !

    mercredi 26 septembre 2012 11:42
  • Bonjour EhJoe,

    Peut-être voir ce fil de juillet dernier : Son et W7 en VB.Net ou différentes solutions avaient été évoquées. Ce qu'il faut savoir c'est qu'il y a un changement notable dans le fonctionnement à partir de Vista, et que la plupart des codes VB6 utilisant WinMM et fonctionnant sous W2K/XP ne fonctionne plus sous Vista et supérieur.

    Dans mon dernier message de ce fil je fais référence à la dll : CoreAudioApi qui permet de connaitre l'état du son (coupé ou pas, etc.), et de régler le volume "général" et non pas celui de l'application.

    Après avoir ajouté une référence à cette dll, le code se résume à :

    Imports CoreAudioApi
    
    Public Class Form1
        Private AudioDevice As MMDevice
    
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Dim DevEnum As MMDeviceEnumerator
    
            If System.Environment.OSVersion.Version.Major >= 6 Then
                DevEnum = New MMDeviceEnumerator
                AudioDevice = DevEnum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia)
            Else
                MessageBox.Show("Vista minimum requis")
            End If
        End Sub
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            With AudioDevice.AudioEndpointVolume
                .Mute = False                         ' Réactive le son si nécessaire
                .MasterVolumeLevelScalar = 30 / 100   ' Son à 30%
            End With
        End Sub
    End Class

    La dll est en C#. J'ai vu une dll en vb6 qui gère les deux systèmes : avant/après Vista -> fonctionne sous VB6 pas sous VB.Net (utilisation de VarPtr, assembleur...)


    Cordialement, Jacques

    • Proposé comme réponse Lyamine mercredi 26 septembre 2012 19:01
    • Non proposé comme réponse Lyamine mercredi 26 septembre 2012 19:31
    • Proposé comme réponse Lyamine mercredi 26 septembre 2012 20:13
    • Marqué comme réponse EhJoe vendredi 28 septembre 2012 07:53
    • Non marqué comme réponse EhJoe vendredi 28 septembre 2012 07:53
    mercredi 26 septembre 2012 12:46
  • Bonsoir Jacques,

    Je te remercie de ta réponse mais... ça a l'air de coincer un petit rien... voici :

    Faut-il pour le mettre dans le répertoire de l'exe ("Bin" pour le moment), que je récupère le fichier :

    CoreAudiApi.dll

    Si c'est le cas, je ne trouve guère, très peu de réponses Gogole et surtout en english, connais-tu un endroit sûr où la télécharger ?

    Sinon, pour le reste, est-ce dû uniquement à l'absence de la DLL, car je croyais que l'interface n'allait quand même pas chercher les fichiers déclarés avant de lancer le code, y doit y avoir quelque chose qui ne lui convient pas ?

    Ben... au plaisir, cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    mercredi 26 septembre 2012 17:20
  • Bonsoir Joseph

    Quel est le message lorsque tu passes la souris sur l'import surligné en vert ?

    Je pense qu'il faut ajouter la référence au projet par le menu projet --> ajouter une référence puis aller dans l'onglet parcourir et choisir la DLL CoreAudiApi.dll.

    Est-ce que tu l'as fait ?

     

    Cordialement


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !



    • Modifié Lyamine mercredi 26 septembre 2012 17:34
    mercredi 26 septembre 2012 17:26
  • Bonsoir Lyamine,

    Ben justement le truc en vert me dit qu'il n'y a rien à dire si on peut dire en parlant de dire...

    Oui, enregistrer le composant, je sais mais, sans savoir qu'il fallait ici le faire (j'y pense seulement pour le pack de distribution).

    Le problème est que je ne trouve pas CoreAudioApi.dll, mais seulement (Core.dll + PresentationCore.dll) que j'ai mis dans la liste du haut en tant que "référence"...

    Ah ?

    Tu peux recopier le code de Jacques pour voir...

    Au plaisir, cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire



    • Modifié EhJoe mercredi 26 septembre 2012 18:02
    mercredi 26 septembre 2012 17:55
  • Bonsoir Lyamine,

    Ben justement le truc en vert me dit qu'il n'y a rien à dire si on peut dire en parlant de dire...

    Oui, enregistrer le composant, je sais mais, sans savoir qu'il fallait ici le faire (j'y pense seulement pour le pack de distribution).

    Le problème est que je ne trouve pas CoreAudioApi.dll, mais seulement (Core.dll + PresentationCore.dll) que j'ai mis dans la liste du haut en tant que "référence"...

    Ah ?

    Tu peux recopier le code de Jacques pour voir...

    Au plaisir, cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire



    En fait tu as des onglets :

    Clique droit sur Références (afficher tout les fichiers - 2ème icône en dessous de "Explorateur de solutions")

    puis aller dans parcourir


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !



    • Modifié Lyamine mercredi 26 septembre 2012 18:54
    mercredi 26 septembre 2012 18:45
  • Je viens de tester et ça fonctionne bien :)

    Il faut savoir maintenant si ton code va être utilisé sous XP ou non.


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !

    mercredi 26 septembre 2012 18:56
  • Lyamine,

    J'en ai bavé, je l'ai trouvé mais elle n'appartient pas à MS mais à ATI (gestion vidéo et autres je crois).

    Je l'ai mis dans le s32, et l'éditeur ne la trouvait pas alors qu'elle y était, je l'ai donc mis dans le s64 et là l'éditeur en voulait, ouf !

    Un malheur n'arrive jamais seul, maitenant c'est ça que j'ai de souligné en BLEU :

     Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        AudioDevice.AudioEndpointVolume.Mute = False                         ' Réactive le son si nécessaire
        AudioDevice.AudioEndpointVolume.MasterVolumeLevelScalar = 30 / 100   ' Son à 30%
      End Sub
    AudioDevice.AudioEndpointVolume

    Il me dit :

    Erreur 1 'AudioEndpointVolume' n'est pas un membre de 'CoreAudioApi.MMDevice'. C:\Users\joe\Documents\Visual Studio 2010\Projects\_Exemples\fichier lecture\Form1.vb 17 5 fichier lecture

    *

    Sinon : "oui" j'aurais au moins besoin de XP qui est toujours répandu...

    Aors je ne sais pas ce qui lui manque cette fois (audioEnpointVolume) serait-il une nouvelle dll ?

    Au plaisir, cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    mercredi 26 septembre 2012 19:24
  • CoreAudioApi n'a pas l'air de marcher sous XP :/

    Donc je pense qu'on revient au début.

    Peux-tu tester mon projet : http://dl.free.fr/mmy1sk9y2

    Est-ce que ça fonctionne ?


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !

    mercredi 26 septembre 2012 19:37
  • Lyamine,

    C'est exactement ce que je voulais, sauf qu'il faut qu'il fasse XP aussi, merci mille fois.

    Et merci à Jacques aussi...

    ' foce volum Vista et >
    Imports CoreAudioApi
    Public Class Form1
      Private AudioDevice As MMDevice
    
      Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim DevEnum As MMDeviceEnumerator
    
        If System.Environment.OSVersion.Version.Major >= 6 Then
          DevEnum = New MMDeviceEnumerator
          AudioDevice = DevEnum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia)
        Else
          MessageBox.Show("Vista minimum requis")
        End If
      End Sub
    
      Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        AudioDevice.AudioEndpointVolume.Mute = False                         ' Réactive le son si nécessaire
        AudioDevice.AudioEndpointVolume.MasterVolumeLevelScalar = 30 / 100   ' Son à 30%
      End Sub
    End Class

    Alors à bientôt pour le traitement d'XP ?

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    mercredi 26 septembre 2012 19:58
  • Lyamine,

    C'est exactement ce que je voulais, sauf qu'il faut qu'il fasse XP aussi, merci mille fois.

    Et merci à Jacques aussi...

    ' foce volum Vista et >
    Imports CoreAudioApi
    Public Class Form1
      Private AudioDevice As MMDevice
    
      Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim DevEnum As MMDeviceEnumerator
    
        If System.Environment.OSVersion.Version.Major >= 6 Then
          DevEnum = New MMDeviceEnumerator
          AudioDevice = DevEnum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia)
        Else
          MessageBox.Show("Vista minimum requis")
        End If
      End Sub
    
      Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        AudioDevice.AudioEndpointVolume.Mute = False                         ' Réactive le son si nécessaire
        AudioDevice.AudioEndpointVolume.MasterVolumeLevelScalar = 30 / 100   ' Son à 30%
      End Sub
    End Class

    Alors à bientôt pour le traitement d'XP ?

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire



    Test sur XP, et tiens nous au courant ;)

    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !


    • Modifié Lyamine mercredi 26 septembre 2012 20:31
    • Marqué comme réponse Aurel Bera vendredi 28 septembre 2012 06:50
    • Non marqué comme réponse EhJoe vendredi 28 septembre 2012 07:52
    mercredi 26 septembre 2012 20:13
  • Lyamine

    Test sur XP, et tiens nous au courant ;)

    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !

    Pourquoi, tu ne fais plus le code ?

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    mercredi 26 septembre 2012 20:46
  • Lyamine

    Test sur XP, et tiens nous au courant ;)

    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !

    Pourquoi, tu ne fais plus le code ?

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire



    Si mais pas ce soir ^^ je suis over cette semaine, j'ai fini hyper tard le travail. Juste dit moi si le code fonctionne sous XP. de mon coté je vais essayer de finir ce weekend grand max.

    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !

    mercredi 26 septembre 2012 22:14
  • Lyamine, le code fonctionne à merveille, merci encore pour l'avoir fait tourner.

    Cordialement, Joe.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    jeudi 27 septembre 2012 05:47
  • Ah ok, superbe. On peut clore le thread ? de mon coté je vais essayer de finir (debug) mon code.

     

    Cordialement


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !


    • Modifié Lyamine jeudi 27 septembre 2012 06:09
    jeudi 27 septembre 2012 06:00
  • Le 26/09/2012 19:20, EhJoe a écrit :
    > Bonsoir Jacques,
    >
    > Je te remercie de ta réponse mais... ça a l'air de coincer un petit
    > rien... voici :
    >
    > Faut-il pour le mettre dans le répertoire de l'exe ("Bin" pour le
    > moment), que je récupère le fichier :
    >
    > CoreAudiApi.dll
    >
    > Si c'est le cas, je ne trouve guère, très peu de réponses Gogole et
    > surtout en english, connais-tu un endroit sûr où la télécharger ?
    >
     
    Lien direct de téléchargement :
     
    une fois dézippé, tu as un fichier 'CoreAudioAPI.dll' dans un sous
    répertoire 'CoreAudio2_bin'.
     
    La dll, tu la places ensuite où tu veux, l'important est d'y ajouter une
    référence dans ton projet, comme te l'as indiqué Lyamine.
     --
     
    Cordialement,
     
    Jacques.
     

    Cordialement, Jacques
    jeudi 27 septembre 2012 06:32
  • Bonjour Jacques,

    Ça y est c'est fait, comme indiqué dans les différentes réponses, car j'avais un problème avec sys32 et sys64 (ou ce qui en fait office), j'avais mis dans sys32 la dll mais l'éditeur m'envoyait dans sys64 et n'en démordait pas, car dans sys32 il me masquait la dll ?

    C'est réglé, merci encore, je n'ai plus qu'à voir avec Lyamine pour le cas de XP encore trop répandu pour être exclut.

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    jeudi 27 septembre 2012 07:04
  • Salut EhJoe,

    Cela fait bien longtemps ;)

    Si je comprends bien, tu veux activer le son de Windows si celui-ci est 'Muté' et mettre le volume à 30% ?
    Chez moi, je viens de tester ceci :

    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)
    
        Private Sub Button1Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            ' On descend le volume à zéro
            For i = 1 To 100
                keybd_event(Windows.Forms.Keys.VolumeDown, 255, 0, 0)
                keybd_event(Windows.Forms.Keys.VolumeDown, 0, 0, 0)
            Next
    
            ' Si le son est muté on unmute
            keybd_event(Windows.Forms.Keys.VolumeMute, 0, 0, 0)
    
            ' On augmente le volume suivant le nombre de boucles
            For i = 1 To 12 ' 12 est égal à ~50%
                keybd_event(Windows.Forms.Keys.VolumeUp, 1, 0, 0)
                keybd_event(Windows.Forms.Keys.VolumeUp, 0, 0, 0)
            Next
        End Sub

    Je ne dois surement pas t'avoir compris. Cela m'a l'air trop simple !

    Bien à toi.


    ZGuideTV.NET - administrator/developer

    • Marqué comme réponse EhJoe vendredi 28 septembre 2012 08:29
    jeudi 27 septembre 2012 20:48
  • Bonjour,

    Pouvons-nous considérer que vous avez résolu votre problème avec les scénarios proposés ? Dans l'affirmative, pourriez-vous partager avec nous la solution, afin que d'autres personnes avec le même problème puissent profiter de cette solution ?

    Désormais, nous marquons les solutions proposées. N'hésitez pas à revenir et supprimer la réponse marquée si la solution n’est pas correcte. Merci !

    Cordialement,

    Aurel


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    vendredi 28 septembre 2012 06:51
  • Cher Pascal,

    Ah mais... lentement le vb6 vient au vbNet dans le forum, c'est bien, sauf qu'en 2000 y avait 10 questions par jour, et là ça descend à 1 question par jour (partout : développez, vbFrance, y a que le "site du 0" qui monte à 2, 3 par jour)... baisse générale...

    Oh tu sais, souvent le code est plus simple que les exemples qu'on trouve. La preuve, la première réponse ici me donnait cent lignes de codes, la secondes de Jacques (de vb6) me donnait bien plus court mais il fallait déclarer une référence, et toi tu descends à quelques lignes sans référence (dll) à enregistrer...

    Alor ton code marche à la perfection et c'est ce que je voulais :

    Option Explicit On
    Public Class Form1
      Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)
    
      Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        Dim i As Integer = 0
        For i = 1 To 100 ' Son DESCEND à 0
          keybd_event(Windows.Forms.Keys.VolumeDown, 255, 0, 0)
          keybd_event(Windows.Forms.Keys.VolumeDown, 0, 0, 0)
        Next
        keybd_event(Windows.Forms.Keys.VolumeMute, 0, 0, 0) ' SON = ok forcé
        For i = 1 To 7 ' Son MONTE (réglage) : 24 = 100%, 12=50%, 0=0%
          keybd_event(Windows.Forms.Keys.VolumeUp, 1, 0, 0)
          keybd_event(Windows.Forms.Keys.VolumeUp, 0, 0, 0)
        Next
        End
      End Sub
    End Class

    Juste une question, moi, sur Seven ça marche, as-tu la possibilité de m'indiquer si sur Vista et surtout XP ça fonctionne aussi ?

    Au plaisir, cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    vendredi 28 septembre 2012 07:28
  • Bonjour Aurel,

    Ah, attends je te prie, car je ne sais pas encore si ça tourne sur les différents OS et sinon, et sinon seulement, il y avait Lyamine qui devait me faire du code, ce qui ne serait plus la peine si ça tourne comme voulu avec ce dernier exemple...

    Pas de problème, je résoudrai la question moi même dès que j'aurais les réponses attendues, pas d'inquiétude j'ai l'habitude, "moi" je suis mes questions (quand on y répond).

    Par contre si tu peux mettre "un point" à Pascal Hubert il le mérite, moi  je ne peux plus lui en mettre j'ai épuisé ma dotation unique...

    Merci encore, au plaisir, cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    vendredi 28 septembre 2012 07:38
  • Bonjour,

    OK, fait moi signe s'il y a un problème sous XP. A la rigueur utilise une machine virtuelle pour tester.


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !

    vendredi 28 septembre 2012 07:52
  • Bonjour Lyamine,

    J'en déduis que tu n'as pas XP mais est-ce que tu as Vista pour l'essayer ?

    Machine virtuel = encore un machin d'enfer genre Apache pour le PHP :o)

    Je vais poser une question en demandant le test XP.

    Au plaisir, cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire



    • Modifié EhJoe vendredi 28 septembre 2012 07:56
    vendredi 28 septembre 2012 07:56
  • EhJoe,

    Je ne connaissais que :

    Windows.Forms.Keys.VolumeMute

    Je suis parti de là.

    Personnellement, je suis sous Windows 7 64 bit. Mais c'était déjà référencé sous VS 2005. Donc, pas de Windows Vista et encore moins de Seven à l'époque !

    Bien à toi.


    ZGuideTV.NET - administrator/developer

    vendredi 28 septembre 2012 08:04
  • Pascal,

    Ah zut ! J'ai fait une demande de test, bon je vais l'annuler.

    AUTRE CHOSE, j'ai vu que tu faisais dans la TV sur un de tes sites, à ce titre j'ai un petit problème depuis bien longtemps dont tu connais peut être la solution, voir en vbNet, ici ça n'a jamais été résolu en fait, on a essayé seulement hélas. Est-ce qu'il est possible de t'écrire depuis ton lien zGuideTV.Net ou autre ?

    Au plaisir, cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    vendredi 28 septembre 2012 08:09
  • Bonjour Lyamine,

    J'en déduis que tu n'as pas XP mais est-ce que tu as Vista pour l'essayer ?

    Machine virtuel = encore un machin d'enfer genre Apache pour le PHP :o)

    Je vais poser une question en demandant le test XP.

    Au plaisir, cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire



    J'ai Windows XP mais non installé et mon PC est sur Windows 7 Home premium (personnel). Si tu as Windows 7 Pro, tu peux installer Virtual XP avec XP Mode. En ce moment j'ai pas trop le temps de faire le test :/ Sur un autre post (Boucle infinie mais finie), j'ai répondu à 2H du matin lol


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !

    vendredi 28 septembre 2012 08:10
  • Lyamine,

    C'est bon, c'est résolu, ça tourne depusi au moins XP.

    J'attends une réponse de Pascal et je clos, encore merci :o)

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    vendredi 28 septembre 2012 08:14
  • Pas de problème EhJoe.

    Mon adresse email se trouve dans 'À propos' sur : http://www.nxtvepg-kastortv.org/

    Pascal.


    ZGuideTV.NET - administrator/developer


    vendredi 28 septembre 2012 08:20
  • Lyamine,

    C'est bon, c'est résolu, ça tourne depusi au moins XP.

    J'attends une réponse de Pascal et je clos, encore merci :o)

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire



    Au plaisir ;)

    Merci de valider par "Proposer comme réponse" si celle-ci répond à votre demande !

    vendredi 28 septembre 2012 08:26
  • Bonjour EhJoe,

    Juste une petite remarque : si tu avais regardé le fil Son et W7 en VB.Net que je t'ai indiqué dans mon premier message, tu aurais peut être vu mon message du mardi 17 juillet 2012 13:58 qui propose une solution tout à fait similaire à celle proposée ici par Pascal Hubert, que je salue, par ailleurs.

    Et je peux te confirmer que cela fonctionne sous W7 et XP, à une différence prêt : l'incrémentation/décrémentation des touches VolumeUp et VolumeDown est de 2% sous W7 et 4% sous XP, en tout cas sur mon matériel sous W7 intégrale avec XP Pro en machine virtuelle grâce à XPMode, dont je trouve qu'il est un peu dommage de se passer : une licence gratuite de la part de MS, ce n'est pas tous les jours.  

    Cette différence de pourcentage semble codé en dur (pas certain). A savoir aussi que la touche Mute est une touche bascule, ce qui n'a pas d'importance dans l'utilisation que tu fais, mais son effet dépend de l'état qui précède son action.

    NB : je ne demande pas de points supplémentaires ;-)


    Cordialement, Jacques

    dimanche 30 septembre 2012 13:52
  • Bonjour Pascal,

    As-tu eu mon mail ?

    cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    lundi 1 octobre 2012 21:40