Port série ???

Résolu
Signaler
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
-
Messages postés
14
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
13 novembre 2006
-
Salut,

Existe t'il un moyen de connaitre la liste des port COM d'un PC ?
Merci par avance pour vos réponses.

Shell

5 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Une des méthodes est de tenter de les ouvrir :
- Si ca marche, le port existe.
- si ca marche pas, vérifier avec GetLastError si on a ERROR_FILE_NOT_FOUND.

//***************************************************************************************
// HasHardware :
//***************************************************************************************
BOOL TCommDevice::HasHardware(LPCTSTR lpszName)
{
// tentative d'ouverture
HANDLE hComm = OpenCommDevice(lpszName); if(hComm INVALID_HANDLE_VALUE && GetLastError() ERROR_FILE_NOT_FOUND)
return FALSE;
else
{
// on ferme le port si on a réussi à l'ouvrir
if(hComm != INVALID_HANDLE_VALUE)
CloseHandle(hComm);
return TRUE;
}
}

//***************************************************************************************
// OpenCommDevice :
//***************************************************************************************
HANDLE TCommDevice::OpenCommDevice(LPCTSTR lpszName)
{
// tentative d'ouverture (si échec, on tente l'accès direct en insérant "[file://\\.\ \\.\]"
// au début du nom)
ASSERT(lpszName != NULL);
HANDLE hComm = CreateFile(lpszName, GENERIC_READ|GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM|FILE_FLAG_OVERLAPPED, NULL); if(hComm INVALID_HANDLE_VALUE && GetLastError() ERROR_FILE_NOT_FOUND)
{
LPTSTR lpszAltName = new TCHAR[_tcslen(lpszName)+5];
_tcscpy(lpszAltName, _T("\\\\.\"));
_tcscpy(lpszAltName+4, lpszName);
hComm = CreateFile(lpszAltName, GENERIC_READ|GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM|FILE_FLAG_OVERLAPPED, NULL);
delete[] lpszAltName;
}
return hComm;
}
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
L'ouverture d'un port COM est en mode exclusif (0 pour le dwShare). Pour savoir si un port existe et est ouvert c'est justement un teste de l'existence. Tester avec CreateFile puis si renvoi INVALID_HANDLE_VALUE, bérifier avec GetLastError (ERROR_FILE_NOT_FOUND ou autre code d'erreur comme pour les fichiers).
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Yep,

Niquel ta solution.
Seulement maintenant comment est-ce que peux faire pour savoir si mon port est connecté ou non ?

Peut etre que l'ouverture de mon port se fait en exclusif non ?

Shell

P.S : Faudrait que ca reste en API car je vais porter le code sous delphi ensuite.
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Nickel de chez nickel, ca rulz impec.

Merci pour tout.

Shell
Messages postés
14
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
13 novembre 2006

slt

je suis tomber sur cette source par hasard et comme il s'avère que j'ai réalisée
une source sur le sujet que j'ose croie plus propre

- Détecter tous les ports COM existant série et USB via la base de registre.

- tester si les ports COM sont occuper.




<!--[if !supportEmptyParas]--> <!--[endif]-->

je la propose : source :
http://www.cppfrance.com/code.aspx?ID=30473