21xrx.com
2025-04-03 11:34:55 Thursday
文章检索 我的文章 写文章
C++读取USB设备ID
2023-07-03 10:51:53 深夜i     32     0
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设备等等。

  
  

评论区

请求出错了