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

MFC Discussion :

Port COM mscomm


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Par défaut Port COM mscomm
    Bonjour

    existe t-il une methode pour recuperer les ports com "existants" sur le pc , à l'image de GetPortNames(); qui retourne un tableau avec les ports pour le composant serialport ... ?

    cordialement

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    tu peux récupérer directement la liste dans la base de registres à cette clef:
    HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM

    ou de faire une itération avec createfile et de tester le retour.:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     wsprintf( sz, "\\\\.\\COM%d", portnumber);   
        m_hCom = CreateFile( sz,
            GENERIC_READ | GENERIC_WRITE,
            0,
            NULL,
            OPEN_EXISTING,
            FILE_FLAG_OVERLAPPED,
            NULL );
     
        if ( m_hCom == INVALID_HANDLE_VALUE )
        {
            GetError();
            return false;
        }
    ce code vient de la faq:
    http://cpp.developpez.com/faq/vc/?pa...WithSerialPort

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Par défaut
    Il n'y a pas plus simple?
    Concernant ton iteration ... quand estce quon sait quon a fini de srcuter la liste de port ? ou ya til une propriété permettant de savoir la fin de la scrutation?

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    si tu as 4 ports séries sur une machine c'est le bout du monde ....
    faire une itération de 0 a 4 me semble pas bien méchant.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Par défaut
    je reformule donc ma question comment connaitre le nombre de port du pc , natif ou émulé ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Par défaut
    En fait la solution n'est pas du tout triviale.
    Ce n'est pas simple de savoir quels sont les ports COM dispo sur la machine, d'autant plus qu'ils ne sont pas forcément nommés "COMXX".
    Ce qui fait que la solution de farscape n'est pas adaptée.

    La solution se trouve ici : http://www.codeguru.com/cpp/w-p/syst...icle.php/c5721
    Le gars a fait un super travail et ça marche très bien.

  7. #7
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    Citation Envoyé par coincoin73 Voir le message
    En fait la solution n'est pas du tout triviale.
    Ce n'est pas simple de savoir quels sont les ports COM dispo sur la machine, d'autant plus qu'ils ne sont pas forcément nommés "COMXX".
    Ce qui fait que la solution de farscape n'est pas adaptée.

    La solution se trouve ici : http://www.codeguru.com/cpp/w-p/syst...icle.php/c5721
    Le gars a fait un super travail et ça marche très bien.
    si tu regardes le code en question , le "gars" utilise deux des méthodes que j'ai citées l'enumeration des ports et la lecture dans la base de registre.
    a partir de windows 2000 effectivement une api est disponible ce qu'il utilise pour énumérer les ports...
    Au final il fait un createfile pour vérifier si le port est valide.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Par défaut
    Autant pour moi

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Par défaut
    En fait jai remarquer que si je fais appel a getportopen apres avoir initialisé le port com ... et ouvert la com' j'ai comme toujours false comme valeur de retour dans ma methode ouvrircom et meme si une le port est utilisé par une autre application ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    // init bool open avec letat du port
    	BOOL bOpen = m_pCom->PortOpen::get();
     
    	if (bOpen == false) // si port pas ouvert
        {
    		m_pCom->PortOpen::set(1); // ouvre com
     
    		Sleep(TIMERDELAI); // attente init
     
    		// init buffers
     
    		m_pCom->InputLen::set(0);
    		m_pCom->InBufferCount::set(0);
    		m_pCom->OutBufferCount::set(0);
     
    		SetIntervalleTimer(TIMERDELAI);  // init intervalle timer
     
    		timer_scrute->Start();  // lance timer
    		bOpen = true;	//	 force open a true
    	}
     
        return bOpen;  // retourne open   :  1 ouverture reussi; 0:echec

Discussions similaires

  1. Communiquer sur port COM avec MSCOMM (RS232) et VISCA (caméra sony)
    Par Chekov dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 07/03/2008, 20h44
  2. [socket] envoyer des données vers un port com
    Par Slimer dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 20/07/2004, 17h35
  3. [debutant][Port COM]
    Par Shooter dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 06/07/2004, 09h43
  4. [javaComm]Communication port COM
    Par gui4593 dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 04/06/2004, 12h35
  5. port com
    Par jeremi dans le forum C
    Réponses: 12
    Dernier message: 16/09/2002, 11h37

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