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 :

[API Win32] �num�rer les ports s�rie disponibles


Sujet :

MFC

  1. #1
    tut
    tut est d�connect�
    Membre �clair�
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Par d�faut [API Win32] �num�rer les ports s�rie disponibles
    Bonjour,
    est-ce que vous connaissez une fonction de l'API Win32 qui permet d'�num�rer les ports com disponibles sur la machine ?
    on travaille avec des ports s�rie sur USB qui se traduit par la cr�ation d'un port COM suppl�mentaire, mais ayant un index un peu fantaisiste : COM 5, voire COM 12 ! et j'ai pas envie d'en proposer 25 dans les options... Il me faudrait donc les �num�rer, mais comment faire ?

  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,
    si je me plante le plus simple est de regarder a cet endroit :
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Serial\Enum

  3. #3
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Voil� 6 mani�res de le faire:
    http://www.naughter.com/enumser.html

  4. #4
    tut
    tut est d�connect�
    Membre �clair�
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Par d�faut
    merci !
    mais, finalement, j'ai cr�� ma propre classe en utilisant CreateFile(), je pensais que �a allait �tre long, mais le constructeur s'ex�cute en moins de 20 ms sur ma machine avec GetTickCount(), donc en fait c'est transparent...
    cool... 8)
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    ComPortEnumerator::ComPortEnumerator(unsigned int StartIndex, unsigned int EndIndex)
    {
    	for (unsigned int i=StartIndex; i<EndIndex; i++)
    	{
    		if ( checkComPort(i) )
    			addComPort(i);
    	}
    }
     
    ComPortEnumerator::~ComPortEnumerator()
    {
    }
     
    /*! this function checks if a com port is available on the system */
    bool ComPortEnumerator::checkComPort(unsigned int ComPort)
    {
    	bool Res = false;
     
    	std::ostringstream OStrStream;
    	OStrStream << "\\\\.\\COM" << std::dec << ComPort;	
     
    	HANDLE HCom = CreateFile(	OStrStream.str().c_str(),
    										GENERIC_READ | GENERIC_WRITE,
    										0,
    										NULL,
    										OPEN_EXISTING,
    										FILE_FLAG_OVERLAPPED,
    										NULL ); 
       if ( HCom != INVALID_HANDLE_VALUE )
    	{
    		CloseHandle( HCom );
    		Res = true;
    	}
     
    	return Res;
    }
     
    /*! this function adds an available com port into the collection */
    void ComPortEnumerator::addComPort(unsigned int ComPort)
    {
    	std::ostringstream OStrStream;
    	OStrStream << "COM " << std::dec << ComPort;
    	m_VectStrComPort.push_back( OStrStream.str() );
    }
     
     
    /*! returns the string representation of a com port */
    const std::string& ComPortEnumerator::getStrComPort( unsigned int Index )
    {
    	m_StrBuf = "";
    	if ( Index < m_VectStrComPort.size() )
    		m_StrBuf = m_VectStrComPort[Index];
    	return m_StrBuf;
    }

  5. #5
    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
    tu devrais modifier un peu ton code a l"image du lien propos� par aurelien:
    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
    23
    24
    25
    26
    27
    28
    29
     
    //Up to 255 COM ports are supported so we iterate through all of them seeing
      //if we can open them or if we fail to open them, get an access denied or general error error.
      //Both of these cases indicate that there is a COM port at that number. 
      for (UINT i=1; i<256; i++)
      {
        //Form the Raw device name
        CString sPort;
        sPort.Format(_T("\\\\.\\COM%d"), i);
     
        //Try to open the port
        BOOL bSuccess = FALSE;
        HANDLE hPort = ::CreateFile(sPort, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
        if (hPort == INVALID_HANDLE_VALUE)
        {
          DWORD dwError = GetLastError();
     
          //Check to see if the error was because some other app had the port open or a general failure
          if (dwError == ERROR_ACCESS_DENIED || dwError == ERROR_GEN_FAILURE || dwError == ERROR_SHARING_VIOLATION)
            bSuccess = TRUE;
        }
        else
        {
          //The port was opened successfully
          bSuccess = TRUE;
     
          //Don't forget to close the port, since we are going to do nothing with it anyway
          CloseHandle(hPort);
        }

  6. #6
    tut
    tut est d�connect�
    Membre �clair�
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Par d�faut
    le but de ma classe est de lister les ports com disponibles en lecture/�criture � un instant donn�. Un port d�ja utilis� par une autre appli est consid�r� non disponible, donc non list� par ma classe : c'est ce que je veux.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Lister les ports s�rie disponibles
    Par vtk37 dans le forum D�buter
    R�ponses: 9
    Dernier message: 27/07/2009, 14h35
  2. Lister les ports S�rie disponible
    Par Mattetfamilly dans le forum C++Builder
    R�ponses: 2
    Dernier message: 28/01/2008, 17h07
  3. R�cup�rer la liste des ports S�rie disponibles
    Par marcootz dans le forum C++Builder
    R�ponses: 5
    Dernier message: 29/11/2007, 19h00
  4. Utiliser les ports s�rie avec Wine sous linux
    Par JP.NUAGE dans le forum Mat�riel
    R�ponses: 1
    Dernier message: 21/10/2007, 13h12
  5. Lister les ports com disponible
    Par dyason dans le forum G�n�ral Python
    R�ponses: 1
    Dernier message: 16/08/2004, 10h35

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