2013-10-04 3 views
0

Je travaille sur une application pour trouver tous les périphériques USB avec un port COM. Ma méthode actuelle trouve une liste de tous les appareils com mais cette liste comprend les appareils qui ne sont pas actuellement connectés. Comment puis-je filtrer les appareils non connectés?Comment filtrer les informations sur le périphérique Windows api à partir d'appareils connectés uniquement?

J'essaie d'éviter d'essayer d'établir une connexion avec le périphérique car la liste peut être très volumineuse.

void FindDevice() { 
    SP_DEVINFO_DATA spDevInfoData; 
    QString szClass("USB"); 
    HDEVINFO hDevInfo = GetHDevInfo(szClass); 
    spDevInfoData.cbSize = sizeof(SP_DEVINFO_DATA); 
    for(int i=0; SetupDiEnumDeviceInfo(hDevInfo, i, &spDevInfoData); i++) { 
     DWORD nSize=0 ; 
     TCHAR buf[MAX_PATH]; 
     if (!SetupDiGetDeviceInstanceId(hDevInfo, &spDevInfoData, buf, sizeof(buf), &nSize)) { 
      continue; 
     } 
     QString value(QString::fromWCharArray(buf)); 
     addDevice(value); 
    } 
    update(); 
} 

Répondre

1

Au lieu d'utiliser GetHDevInfo vous devez utiliser SetupDiGetClassDevsEx pour obtenir l'objet HDEVINFO. Vous pouvez transmettre à cette fonction un indicateur nommé DIGCF_PRESENT qui garantit que seuls les périphériques connectés sont renvoyés.

Sans avoir testé pour l'instant, cela devrait fonctionner:

HDEVINFO hDevInfo = SetupDiGetClassDevsEx(GUID_DEVINTERFACE_USB_DEVICE, 
              nullptr, 
              nullptr, 
              DIGCF_ALLCLASSES | DIGCF_PRESENT, 
              nullptr, 
              nullptr, 
              nullptr); 
Questions connexes