You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Qt中获取设备管理器内网络适配器的‘设备描述’?

在Qt中获取Windows设备管理器网络适配器的设备描述

当然可以实现啦!Qt本身没有直接提供读取Windows设备管理器硬件信息的专属类,但咱们可以结合Win32 API来搞定这个需求——毕竟Windows的设备信息都存在系统注册表和设备数据库里,用系统API就能轻松拿到。

实现思路

核心是调用Windows的设备安装API(SetupAPI),通过以下几个关键函数来获取网络适配器的设备描述:

  • SetupDiGetClassDevs:获取网络设备类的所有已连接设备的信息集合
  • SetupDiEnumDeviceInfo:遍历集合里的每一个设备
  • SetupDiGetDeviceRegistryProperty:读取指定设备的“设备描述”属性

具体代码实现

1. 配置项目

首先在Qt项目的.pro文件里添加链接库:

LIBS += -lsetupapi

2. 编写获取函数

以下是完整的可复用函数,直接放到你的Qt类里就能用:

#include <windows.h>
#include <setupapi.h>
#include <QStringList>

#ifdef Q_OS_WINDOWS
QStringList getNetworkAdapterDescriptions()
{
    QStringList adapterDescriptions;
    // 获取当前存在的网络设备类集合
    HDEVINFO deviceInfoSet = SetupDiGetClassDevs(&GUID_DEVCLASS_NET, 
                                                 NULL, 
                                                 NULL, 
                                                 DIGCF_PRESENT | DIGCF_PROFILE);
    if (deviceInfoSet == INVALID_HANDLE_VALUE) {
        return adapterDescriptions;
    }

    SP_DEVINFO_DATA deviceData = {0};
    deviceData.cbSize = sizeof(SP_DEVINFO_DATA);

    // 遍历每个网络设备
    for (DWORD idx = 0; SetupDiEnumDeviceInfo(deviceInfoSet, idx, &deviceData); ++idx) {
        TCHAR descBuffer[MAX_PATH] = {0};
        // 读取设备描述属性(SPDRP_DEVICEDESC对应设备管理器里的"设备描述")
        if (SetupDiGetDeviceRegistryProperty(deviceInfoSet,
                                             &deviceData,
                                             SPDRP_DEVICEDESC,
                                             NULL,
                                             reinterpret_cast<PBYTE>(descBuffer),
                                             sizeof(descBuffer),
                                             NULL)) {
#ifdef UNICODE
            adapterDescriptions.append(QString::fromWCharArray(descBuffer));
#else
            adapterDescriptions.append(QString::fromLocal8Bit(descBuffer));
#endif
        }
    }

    // 释放资源
    SetupDiDestroyDeviceInfoList(deviceInfoSet);
    return adapterDescriptions;
}
#endif

3. 调用示例

在你的业务代码里直接调用这个函数,就能拿到所有网络适配器的设备描述了:

QStringList adapters = getNetworkAdapterDescriptions();
for (const QString& desc : adapters) {
    qDebug() << "网络适配器描述:" << desc;
}

注意事项

  • 这段代码仅适用于Windows平台,用Q_OS_WINDOWS宏包裹可以保证你的项目在其他平台编译不受影响
  • 如果需要获取更多设备信息(比如制造商、硬件ID),只需要修改SetupDiGetDeviceRegistryProperty的第三个参数,比如SPDRP_MFG对应制造商,SPDRP_HARDWAREID对应硬件ID
  • 确保你的程序有足够的权限读取设备信息(一般普通用户权限就足够,但某些特殊设备可能需要管理员权限)

内容的提问来源于stack exchange,提问作者cnm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:07:03