Port série ???

Résolu
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013 - 25 janv. 2005 à 17:59
cs_Ayato Messages postés 14 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 13 novembre 2006 - 12 août 2005 à 17:34
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

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
25 janv. 2005 à 18:22
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;
}
3
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
26 janv. 2005 à 08:59
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).
3
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
25 janv. 2005 à 21:25
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.
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
26 janv. 2005 à 09:22
Nickel de chez nickel, ca rulz impec.

Merci pour tout.

Shell
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Ayato Messages postés 14 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 13 novembre 2006
12 août 2005 à 17:34
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
0
Rejoignez-nous