IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[Win32] comment fonctionne endpointvolume ?


Sujet :

C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 2
    Par défaut [Win32] comment fonctionne endpointvolume ?
    bonjour,
    Je suis ici pour vous faire part de mon problème. J'aimerais régler le volume des application de Windows via un programme un peu comme celui de sndvol.exe de Windows. je me suis renseigné, j'ai trouver une classe qui fais cela mais malgré tous les exemples je n'ai pas compris comment il fonctionne : <endpointvolume.h>.

    ce site propose une solution que je ne comprends pas car il y a les définitions de la classe, les ressources de la classe et le main :
    le site de la MSDN de Microsoft est un peu dans le même cas (je ne comprends pas comment l'utiliser).

    ca fais déjà pas mal de temps que je recherche comment utiliser cette classe mais je n'ai jamais vraiment trouver. C'est pourquoi je fais appel a votre aide, merci d'avance pour d'éventuels reponses

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 470
    Par défaut
    Il s'agit d'un composant COM (Common Object Model).
    COM est une infrastructure système pour construire et utiliser des composants logiciel.
    L'exemple de MSDN est une implémentation classique d'un client de ce composant COM.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 2
    Par défaut
    merci pour votre réponse mais j'ai pas l'impression que ca m'aide. endpoint est donc un COM c'est donc une sorte de classe pour pouvoir utiliser d'autres classes plus grosses d'après ce que j'ai compris. Mais comme je ne comprends pas cette classe je ne peut aller plus loin. Mon but est de faire un programme assez similaire a celui de sndvol.exe mais en rajoutant une option de port serie que j'ai deja faite.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Va falloir être plus clair. La MSDN présente toute la classe, toute son interface et a même des exemples d'utilisation. Je vois difficilement comment une doc pourrait être meilleure. Et pourtant la MSDN est souvent plutôt light sur sa doc justement quand je la parcours pour d'autres sujets...
    Donc tu as l'interface et des exemples, et tu sais pas qu'en faire ?! Le problème ne se situe peut-être pas sur cette classe mais dans ta méconnaissance du langage ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 470
    Par défaut
    Je ne pense pas que cela soit une méconnaissance du langage, ou pas que.

    COM, c'est pas du C++, et à la réponse de @QDPT67, j'ai l'impression qu'il ne voit la programmation que par les paradigmes offerts par le C++.

    @QDPT67, COM n'est pas lié au C++, il est langage agnostique, c'est utilisable aussi bien en VB4/5/6 qu'en C++ ou en Delphi.

    COM est architecturé avec des composants, qui sont une évolution du concept "Objet" du C++/JAVA/...

    Il ne faut pas trop pensé en termes d'objet mais en terme de composant.
    Si vous ne connaissez pas les composants, soit vous vous renseignez sur COM, et c'est long, soit vous regardez comment les exemples travaillent avec et vous faites pareils.

    Essayer de comprendre ces composants COM en terme purement objet à la C++ sera contre-productif.

    "CAudioEndpointVolumeCallback" est une classe C++ qui se charge d'encapsuler l'utilisation du composant COM pour une utilisation plus facile depuis du C++. L'encapsulation est très partielle car cette classe n'utilise que des mécanismes assez basiques, donc transparents pour un novice. Dans du code plus "pro", on utilise des Framework, comme ATL, qui simplifie l'utilisation mais qui demande plus de connaissance en COM.

    Dans les grandes lignes :

    "CoInitialize(NULL);" : pour initialiser l'infrastructure COM pour une utilisation "basique" de celui-ci dans le processus.

    "hr = CoCreateInstance(__uuidof(MMDeviceEnumerator),
    NULL, CLSCTX_INPROC_SERVER,
    __uuidof(IMMDeviceEnumerator),
    (void**)&pEnumerator);"
    : On demande à COM de nous trouvez un composant ayant comme UUID (identifiant unique, ici d'un type de composant particulier) "MMDeviceEnumerator" correspondant à un composant capable d'énumérer le Device Multimédia, de nous fournir une interface de type "IMMDeviceEnumerator" sur lui (car un composant peut avoir beaucoup d'interface dinstinctes) et de mettre cette interface dans "pEnumerator".

    On se sert ensuite de "pEnumerator" en utilisant les méthode de l'interface "IMMDeviceEnumerator" comme "GetDefaultAudioEndpoint" pour avoir le "DefaultAudioEndpoint" (Thanks Captain Obvious ).

    etc...

    "g_pEndptVol" reçoit un pointeur de "IAudioEndpointVolume" pour faire toutes les actions sur le volume.
    "EPVolEvents" est enregistré dans le composant COM pointé par "g_pEndptVol" avec la méthode "RegisterControlChangeNotify", ainsi, quand le composant voudra notifier des changements de volume, c'est la méthode "OnNotify" de "EPVolEvents" qui sera appelé.

    Après, il ne reste que de la bidouille à base de Post-Message caractéristique des applications graphiques Win32 qui n'utilisent pas de framework graphique.

Discussions similaires

  1. [JSF] comment fonctionne <h:message> ?
    Par anitshka dans le forum JSF
    Réponses: 5
    Dernier message: 29/06/2005, 17h36
  2. Comment fonctionne TXmlDocumment ????
    Par almisuifre dans le forum C++Builder
    Réponses: 8
    Dernier message: 18/02/2005, 12h54
  3. comment fonctionne une interface graphique???
    Par elekis dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 27/10/2004, 23h10
  4. Comment fonctionne le ClassExplorer ?
    Par borisd dans le forum C++Builder
    Réponses: 7
    Dernier message: 30/09/2004, 17h44
  5. Comment fonctionne le CVS ?
    Par mathieu dans le forum CVS
    Réponses: 6
    Dernier message: 23/03/2004, 11h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo