21xrx.com
2024-12-22 19:43:22 Sunday
登录
文章检索 我的文章 写文章
C++读取USB设备ID
2023-07-03 10:51:53 深夜i     --     --
C++ 读取 USB设备 ID

USB设备是我们日常生活中常用的设备,例如键盘、鼠标、U盘、移动硬盘等。在C++语言中,我们可以通过编程读取USB设备ID。这里介绍一种基于Windows API的方法。

首先,我们需要用到Windows API中的SetupAPI,该API提供了与设备管理器中设备信息相对应的应用程序接口。我们可以通过它获取USB设备ID,代码如下:


#include <windows.h>

#include <setupapi.h>

#include <initguid.h>

#include <devguid.h>

#include <cfgmgr32.h>

#include <tchar.h>

int main() {

  HDEVINFO hdevinfo; // 设备信息集句柄

  SP_DEVINFO_DATA devinfo_data; // 设备信息数据

  DWORD devIndex = 0; // 设备索引号

  DWORD dwSize = 0, retCode; // 缓冲区大小和返回结果

  TCHAR szBuffer[1024]; // 缓冲区

  // 初始化设备信息集

  hdevinfo = SetupDiGetClassDevs(&GUID_DEVCLASS_USB, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);

  // 判断设备信息集是否有效

  if (hdevinfo == INVALID_HANDLE_VALUE)

    return 0;

  

  // 枚举设备信息集中每个设备

  while (1) {

    devinfo_data.cbSize = sizeof(SP_DEVINFO_DATA); // 初始化设备信息数据的大小

    if (!SetupDiEnumDeviceInfo(hdevinfo, devIndex, &devinfo_data)) {

      retCode = GetLastError();

      if (retCode == ERROR_NO_MORE_ITEMS)

        break;

      

    }

    // 获取设备ID

    if (SetupDiGetDeviceInstanceId(hdevinfo, &devinfo_data, szBuffer, sizeof(szBuffer), &dwSize)) {

      _tprintf(_T("%s\n"), szBuffer);

    }

    devIndex++; // 下一个设备

  }

  // 关闭设备信息集

  SetupDiDestroyDeviceInfoList(hdevinfo);

  return 0;

}

这个代码通过SetupDiGetClassDevs函数获取设备信息集句柄,然后通过SetupDiEnumDeviceInfo函数枚举每个设备,最后通过SetupDiGetDeviceInstanceId函数获取设备ID并输出到控制台上。

需要注意的是,在编译这个代码的时候需要加入setupapi.lib库,这个库在Windows SDK中可以找到。

通过这个方法,我们可以在C++中读取USB设备ID,方便我们进行其他操作,例如识别USB设备类型、控制USB设备等等。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复