0

COM ポートを備えたすべての USB デバイスを検索するアプリケーションに取り組んでいます。私の現在の方法では、すべての com デバイスのリストを見つけますが、このリストには現在接続されていないデバイスが含まれています。接続されていないデバイスを除外するにはどうすればよいですか?

リストが非常に大きくなる可能性があるため、デバイスへの接続を確立しようとしないようにしています。

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

1 に答える 1

1

GetHDevInfo を使用する代わりに、SetupDiGetClassDevsEx を使用してHDEVINFOオブジェクトを取得する必要があります。その関数に、接続されたデバイスのみが返されるようにする DIGCF_PRESENT という名前のフラグを渡すことができます。

今のところテストしていなくても、これはうまくいくはずです:

HDEVINFO hDevInfo = SetupDiGetClassDevsEx(GUID_DEVINTERFACE_USB_DEVICE,
                                          nullptr,
                                          nullptr,
                                          DIGCF_ALLCLASSES | DIGCF_PRESENT,
                                          nullptr,
                                          nullptr,
                                          nullptr);
于 2013-10-04T14:06:49.427 に答える