首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取有关使用SetupAPI的设备的信息

获取有关使用SetupAPI的设备的信息
EN

Stack Overflow用户
提问于 2019-09-20 14:41:23
回答 1查看 1.9K关注 0票数 1

我有一个打印机连接USB端口,我想了解一些有关它的信息。我正在使用SetupDiEnumDeviceInfo函数从setupapi获取信息。我正在做任何事情,就像MSDN中描述的那样。

代码语言:javascript
复制
#include <string>
#include <windows.h>
#include <vector>
#include <iostream>
#include <setupapi.h>
#include <winerror.h>

#pragma comment (lib, "SetupAPI.lib")
static GUID GUID_DEVCLASS_PORTS = { 0x4d36e978, 0xe325, 0x11ce, 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18 };

int main()
{
    SP_DEVINFO_DATA devInfoData;

    HDEVINFO deviceInfo = SetupDiGetClassDevs(&GUID_DEVCLASS_PORTS, 0, 0, DIGCF_PRESENT);
    devInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
    DWORD nDevice = 0;

    if (SetupDiEnumDeviceInfo(deviceInfo, nDevice, &devInfoData))
    {
    }
    return 0;
}

问题是我总是得到false的结果。GetLastError()函数重放259。我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-23 09:14:56

这是我的样本。我添加devGuide.h,并使用GUID_DEVCLASS_USB

代码语言:javascript
复制
#include <string>
#include <windows.h>
#include <setupapi.h>
#include <devguid.h>
#pragma comment (lib, "SetupAPI.lib")

int main()
{
    int res = 0;
    HDEVINFO hDevInfo;
    SP_DEVINFO_DATA DeviceInfoData = { sizeof(DeviceInfoData) };

    // get device class information handle
    hDevInfo = SetupDiGetClassDevs(&GUID_DEVCLASS_USB, 0, 0, DIGCF_PRESENT);
    if (hDevInfo == INVALID_HANDLE_VALUE)
    {
        res = GetLastError();
        return res;
    }

    // enumerute device information
    DWORD required_size = 0;
    for (int i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); i++)
    {
        DWORD DataT;
        char friendly_name[2046] = { 0 };
        DWORD buffersize = 2046;
        DWORD req_bufsize = 0;

        // get device description information
        if (!SetupDiGetDeviceRegistryPropertyA(hDevInfo, &DeviceInfoData, SPDRP_CLASSGUID, &DataT, (PBYTE)friendly_name, buffersize, &req_bufsize))
        {
            res = GetLastError();
            continue;
        }

        char temp[512] = { 0 };
        sprintf_s(temp, 512, "USB device %d: %s", i, friendly_name);
        puts(temp);
    }

    return 0;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58030553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档