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

Bibliothèque standard C Discussion :

accéder au gestionnaire de peripherique


Sujet :

Bibliothèque standard C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 19
    Points : 6
    Points
    6
    Par défaut accéder au gestionnaire de peripherique
    Bonjour tout le monde.

    je sollicite la communauté pour une question.

    Je sait pas si c'est possible mais j'aimerai pouvoir explorer le gestionnaire de périphérique en langage C.

    La finalité c'est récupérer sur quel port com est branché un appareil en particulier.

    merci beaucoup

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 483
    Points : 13 685
    Points
    13 685
    Billets dans le blog
    1
    Par défaut
    Réponse aussi vague que la question : ça dépend de l'OS.

    Réponse plus utile : explicite ton problème en donnant l'OS, le type de port utilisé, comment l'appareil est connecté (montage automatique ou manuel), etc.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 19
    Points : 6
    Points
    6
    Par défaut reponse
    OS : Windows

    périphérique : c'est un lecteur de CV qui est toujours branché.

    Le libellé dans le gestionnaire de périphérique c'est toujours le même.
    sagem telium..

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 19
    Points : 6
    Points
    6
    Par défaut petit oubli
    c'est toujours un port COM.

  5. #5
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,

    Une méthode de fainéasse, qui est classique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    pour num_com de 1 à 128:
        ouvrir COM:com_num
        si pas d'erreur:
             break, c'est le bon port
        sinon:
           rien, continuer

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 19
    Points : 6
    Points
    6
    Par défaut reponse
    Le but du jeux c'est de pouvoir trouver dans le gestionnaire de périphérique de Windows le port qui correspond à mon périphérique qui s'appelle Sagem tellium...

    je ne veut même pas communiquer avec je veux juste savoir sur quel port COM il est installé.
    j'ai oublié que l'on installe le driver à la main avec un .exe.

    Voilou

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 19
    Points : 6
    Points
    6
    Par défaut good
    merci pfeuh.

    effectivement cela marcherait bien.
    Par contre j'ai remarqué que pour certains PC il y a avait un PORT de communication 1 port COM1 qui a priori ne sert pas.

    En suivant cette méthode je sortirais dès le premier.

    Il n'y pas moyen de lire le gestionnaire de périphérique?
    Les informations ne sont pas conservés quelque part?

    merci d'avance

  8. #8
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Points : 1 351
    Points
    1 351
    Par défaut
    Citation Envoyé par manux53 Voir le message
    Par contre j'ai remarqué que pour certains PC il y a avait un PORT de communication 1 port COM1 qui a priori ne sert pas.
    En fait le port est bien sur la carte mère, mais il manque la nappe et le slot supportant le SUBD9. Pour des raisons de coût...

    Citation Envoyé par manux53 Voir le message
    En suivant cette méthode je sortirais dès le premier.
    Bien vu... Soit tu commences à énumérer à partir de COM2, soit tu fais une sorte de ping sur tous les COM... ping auquel seule ta carte saura répondre correctement... GENRE si tu envoies CAFE (en hexa) c'est la seule qui te répondra DECA (toujours en hexa)

  9. #9
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 400
    Points : 23 778
    Points
    23 778
    Par défaut
    Hello,

    Citation Envoyé par manux53 Voir le message
    OS : Windows
    Quelle version ? Ça a de l'importance.

    périphérique : c'est un lecteur de CV qui est toujours branché.
    Le libellé dans le gestionnaire de périphérique c'est toujours le même.
    sagem telium.. Je sait pas si c'est possible mais j'aimerai pouvoir explorer le gestionnaire de périphérique en langage C. La finalité c'est récupérer sur quel port com est branché un appareil en particulier.
    Si ton appareil est branché sur le port série RS/232, tu ne peux pas savoir implicitement ce qu'il y a dessus, ni même s'il y a effectivement quelque chose dessus si l'appareil concerné ne communique pas. Hormis les signaux de contrôle de transmission (DCD, RTS/CTS, etc) il n'y a aucune infrastructure de méta-données sur le port série. Il faut dire qu'il a plus de trente ans et qu'il n'a été conçu que pour être un canal d'échange entre deux machines en milieu semi-perturbé, ainsi que pour pouvoir transmettre soit directement, soit par l'intermédiaire d'un modem (analogique).

    Il n'y a donc pas de système d'énumération comme tu pourrais en trouver sur l'USB, par exemple. Si ta machine sait toute seule sur quelle machine ton terminal se trouve, c'est que c'est le pilote qui a sondé les ports pour le savoir lorsque tu l'as installé. Par contre, le pilote peut effectivement avoir déclaré ton périphérique au bon endroit une fois que tu l'as installé, mais ce n'est pas certain. Il faudrait déjà vérifier à la main si, dans le gestionnaire de périphérique, ton Sagem Tellium apparaît en dessous de l'arborescence d'un port COM donné ou s'il est simplement inscrit dans la liste à l'intérieur d'une classe qui lui est propre. Dans ce cas, Windows est informé de l'existence et de la disponibilité de ce périphérique, et sait qu'il faut appeler ton pilote pour l'exploiter. Les infos s'arrêtent donc là et la seule entité qui serait alors capable de te renseigner, c'est le pilote lui-même et c'est avec lui qu'il faudrait communiquer.

    Dans l'autre cas, tu peux effectivement faire un programme en C pour obtenir ces infos mais ce n'est pas le Gestionnaire de Périphériques qu'il faut appeler, car il ne s'agit là que d'une application au même titre que la tienne et qui exploite les bonnes API du système. Autrement dit, il te faudra écrire un programme qui effectue le même boulot que le Gestionnaire de périphériques, mais limité à ce que tu recherches.


    Ça fait longtemps que je ne développe plus sous Windows mais tu peux quand même regarder du côté de SetupDi : http://support.microsoft.com/kb/259695

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 19
    Points : 6
    Points
    6
    Par défaut merci pour cette reponse
    merci de ta reponse bien analysé.

    Effectivement après des recherches ma réponse se trouve dans l'utilisation des setupDI.
    Pour l'instant j'ai pas réussi à la mettre en place mais bon je vais essayer et sinon je reposterai un message.

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 19
    Points : 6
    Points
    6
    Par défaut setupDI
    Bon apres avoir essayé d'utiliser les setupDI avec DEV c++ et codeBlock je me heurte au même problème qui sont lié au compilateur je pense.

    Quand je compile mon programme il me marque toujours le même message d'erreur.

    undefined reference to ' _imp_SetupDiGetClassDEVSA@16'
    j'ai du oublier dans le projet un lien vers quelque part mais je ne sait pas ou ?

    merci d'avance

  12. #12
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 483
    Points : 13 685
    Points
    13 685
    Billets dans le blog
    1
    Par défaut
    Quel fichier d'en-tête utilises-tu pour obtenir les fonctions qui t'intéressent ? Il faut rajouter la bibliothèque correspondante aux options du linker.

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 19
    Points : 6
    Points
    6
    Par défaut fichier entête
    j'ai ajouté :
    <stdio.h>
    <windows.h>
    <setupapi.h>
    <devguid.h>
    <regstr.h>
    <stdlib.h>

    J'ai ouvert setupapi.h et j'y ai trouvé la fonction SetupDiGetClassDEVS.

    Ou alors est-ce que mon appel à la fonction est incorrect ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    hDevInfo = SetupDiGetClassDevs(NULL,
               0, // Enumerator
               0,
               DIGCF_PRESENT | DIGCF_ALLCLASSES );

  14. #14
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 483
    Points : 13 685
    Points
    13 685
    Billets dans le blog
    1
    Par défaut
    Avec Code::Blocks : dans Project / Build Options / Linker Settings / Add, essaye de mettre C:\Program Files\CodeBlocks\MinGW\lib\libsetupapi.a; (le chemin est à adapter of corse).

    Ton erreur est une erreur du linker ; si ton appel à la fonction était incorrect, tu aurais une erreur du compilateur.

  15. #15
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 400
    Points : 23 778
    Points
    23 778
    Par défaut
    Et surtout, comme demandé en #9, dis-nous avec quelle version de Windows tu travaillles.

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 19
    Points : 6
    Points
    6
    Par défaut Windows
    cela peut être n'importe quel version de Xp à 7.

    merci pour la manipulation de libsetupapi.a cela fonctionne.

    Je récupère pas encore le port COM mais bon j'avance.

    merci pour vos conseils.

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 19
    Points : 6
    Points
    6
    Par défaut la suite
    le programme fonctionne mais je ne récupère pas le port il me récupère juste le nom du matériel.

    J'ai trouvé par contre une autre méthode qui s'appelle setupdigetdeviceinterfacedetail.

    vous en pensez quoi ?

Discussions similaires

  1. Impossible d'accéder au gestionnaire de périphériques.
    Par boxlee dans le forum Windows Vista
    Réponses: 2
    Dernier message: 24/09/2008, 14h43
  2. Pb Gestionnaire Peripherique/parametres reseaux
    Par sylvain giardini dans le forum Windows XP
    Réponses: 4
    Dernier message: 18/08/2008, 14h16
  3. impossible d'accéder au Gestionnaire des tâches
    Par ver_for dans le forum Sécurité
    Réponses: 7
    Dernier message: 10/05/2008, 13h24
  4. Windows NT - Gestionnaire Peripherique
    Par zoaax dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 26/04/2006, 15h50
  5. Accéder à un espace mémoire sous XP
    Par keny dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 02/08/2002, 12h37

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