DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013
-
25 janv. 2005 à 17:59
cs_Ayato
Messages postés14Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention13 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.
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 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;
}
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 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).