2013-10-04 33 views
0

我正在使用COM端口查找所有USB設備。我當前的方法找到所有com設備的列表,但是,此列表包含當前未連接的設備。我怎樣才能過濾未連接的設備?如何從僅連接的設備過濾Windows api設備信息?

我試圖避免嘗試建立到設備的連接,因爲列表可能非常大。

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(); 
} 

回答

1

而不是使用GetHDevInfo的你應該使用SetupDiGetClassDevsEx得到HDEVINFO對象。您可以將該函數傳遞一個名爲DIGCF_PRESENT的標誌,以確保僅返回連接的設備。

,而不必測試了它,現在,這應該工作:

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