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
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
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.:
ce code vient de la faq:
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; }
http://cpp.developpez.com/faq/vc/?pa...WithSerialPort
Ce qui est affirmé sans preuve peut être nié sans preuve Euclide.
Les conversions numériques en C,C++,C++/CLI
DLL d'extensions : écriture d'un plug-in de classe
Démarrer avec les MFC 2/2
Création d'un ActiveX MFC
Intégration d'une imprimante PDF pour éditions automatisées
Migrer du code de Visual C++ 6.0 vers Visual C++ 2005
Démarrer avec les MFC sous Visual C++1/2
la Faq Visual C++ 500 Q/R,Mon blog
Aide en Ligne MFC
Cours et tutoriels C++ - FAQ C++ - Forum C++.
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?
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.
Ce qui est affirmé sans preuve peut être nié sans preuve Euclide.
Les conversions numériques en C,C++,C++/CLI
DLL d'extensions : écriture d'un plug-in de classe
Démarrer avec les MFC 2/2
Création d'un ActiveX MFC
Intégration d'une imprimante PDF pour éditions automatisées
Migrer du code de Visual C++ 6.0 vers Visual C++ 2005
Démarrer avec les MFC sous Visual C++1/2
la Faq Visual C++ 500 Q/R,Mon blog
Aide en Ligne MFC
Cours et tutoriels C++ - FAQ C++ - Forum C++.
je reformule donc ma question comment connaitre le nombre de port du pc , natif ou émulé ?
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.
Ce qui est affirmé sans preuve peut être nié sans preuve Euclide.
Les conversions numériques en C,C++,C++/CLI
DLL d'extensions : écriture d'un plug-in de classe
Démarrer avec les MFC 2/2
Création d'un ActiveX MFC
Intégration d'une imprimante PDF pour éditions automatisées
Migrer du code de Visual C++ 6.0 vers Visual C++ 2005
Démarrer avec les MFC sous Visual C++1/2
la Faq Visual C++ 500 Q/R,Mon blog
Aide en Ligne MFC
Cours et tutoriels C++ - FAQ C++ - Forum C++.
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
Partager