Qt Windows下根据GUID获取设备名称

Qt Windows下根据GUID获取设备名称

void guidFormString(const char *pszGuid, GUID &guid) {
    if (pszGuid == nullptr) return;

    int temp[3] = {0, 0, 0};
    sscanf_s(pszGuid, "%08x-%4hx-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", &(guid.Data1), &(guid.Data2)
            , reinterpret_cast<unsigned int*>(&(guid.Data3)), reinterpret_cast<unsigned int*>(&guid.Data4[0])
            , reinterpret_cast<unsigned int*>(&guid.Data4[1]), reinterpret_cast<unsigned int*>(&guid.Data4[2])
            , reinterpret_cast<unsigned int*>(&guid.Data4[3]), reinterpret_cast<unsigned int*>(&guid.Data4[4])
            , &temp[0], &temp[1], &temp[2]);

    guid.Data4[5] = static_cast<unsigned char>(temp[0]);
    guid.Data4[6] = static_cast<unsigned char>(temp[1]);
    guid.Data4[7] = static_cast<unsigned char>(temp[2]);
}

QString getInterfaceNameFromDeviceGuid(const QString &sGuid, ulong &eCode) {
    if (sGuid.isEmpty()) return "";

    //1. 打开动态库,获取动态库实例
    auto wlpstr = QString::fromLocal8Bit("Iphlpapi.dll");
    auto strWlpstr = wlpstr.toStdWString();
    auto lpcwStr = strWlpstr.c_str();
    auto hDll = LoadLibrary(lpcwStr);

    auto NhGetInterfaceNameFromDeviceGuid =
            reinterpret_cast<type_NhGetInterfaceNameFromDeviceGuid>(GetProcAddress(hDll, "NhGetInterfaceNameFromDeviceGuid"));

    //2. 将字符换类型的guid转换成结构体GUID
    GUID guid;
    guidFormString(sGuid.toStdString().c_str(), guid); // 我网卡的GUID,对应接口名为“本地连接”

    //3. 根据GUID获取设备的名称
    TCHAR buf[200] = {0};
    DWORD len = sizeof(buf);
    eCode = NhGetInterfaceNameFromDeviceGuid(&guid, reinterpret_cast<char*>(buf), &len, 0, 1);

    QString sNetCardName = "";
    if(eCode == 0) {
         sNetCardName = QString::fromWCharArray(buf);
    } else {
    }

    //4. 释放动态库资源
    FreeLibrary(hDll);

    return sNetCardName;
}

推荐一个免费分享程序得网站:https://www.chengxuunion.com/

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值