Réponse acceptée !
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 "
\\.\"
// 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;
}