21xrx.com
2024-09-20 05:49:39 Friday
登录
文章检索 我的文章 写文章
如何使用C++获取USB设备名称
2023-07-01 17:08:34 深夜i     --     --
C++ USB 设备名称 获取

使用C++ 来获取 USB 设备名称是一个很常见的需求,因为在很多应用场景中我们都需要查找可用的 USB 设备来执行相应的任务。在这篇文章中,我们将讨论如何使用 C++ 来获取 USB 设备的名称。

首先,我们需要了解一下操作系统是如何处理 USB 设备的。当我们将 USB 设备插入电脑后,操作系统会检测到这个设备并将其识别为一个新的硬件设备。然后,操作系统会调用其相应的驱动程序来与设备进行通信,以便可以进行数据交换。

现在,让我们来看看如何使用 C++ 来获取 USB 设备名称。我们可以通过调用 Windows 的 API 来获取 USB 设备名称。具体的步骤如下:

1. 首先,我们需要获得一个持有 USB 设备信息的结构体,这个结构体称为 SP_DEVICE_INTERFACE_DATA 。我们可以使用 SetupDiEnumDeviceInterfaces 函数来获得这个结构体。

2. 接下来,我们需要使用 SP_DEVICE_INTERFACE_DETAIL_DATA 结构体,它包含了设备路径信息。我们需要调用 SetupDiGetDeviceInterfaceDetail 函数来获取这个结构体。

3. 一旦我们获取了设备路径信息,我们就可以调用 CreateFile 函数来打开设备。这个函数返回一个设备句柄。

4. 我们现在可以通过调用 DeviceIoControl 函数来与设备进行交互。我们可以使用 IOCTL_STORAGE_GET_DEVICE_NUMBER 控制码来获取设备名称。

5. 最后,我们可以通过调用 CloseHandle 函数来关闭设备句柄。

下面是一个使用上述步骤来获取 USB 设备名称的 C++ 代码实例:


#include <windows.h>

#include <setupapi.h>

#include <devguid.h>

#include <initguid.h>

#include <cfgmgr32.h>

#include <iostream>

using namespace std;

int main() {

  HDEVINFO hDevInfo;

  SP_DEVINFO_DATA DeviceInfoData;

  DWORD i;

  TCHAR buffer[1024];

  DWORD buffersize = sizeof(buffer);

  DWORD DataT;

  // Create a HDEVINFO with all present devices.

  hDevInfo = SetupDiGetClassDevs(NULL,

    TEXT("USB"),

    NULL,

    DIGCF_PRESENT | DIGCF_ALLCLASSES);

  if (hDevInfo == INVALID_HANDLE_VALUE)

    // Handle error.

    cout << "Error: Unable to create device information set." << endl;

    return 1;

  

  //Enumerate through all devices in Set.

  for (i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); i++) {

    //Get the device name and description.

    if (SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_DEVICEDESC, &DataT, (PBYTE)buffer, buffersize, &buffersize))

      cout << "Device: " << buffer << endl;

    

  }

  //Clean up.

  SetupDiDestroyDeviceInfoList(hDevInfo);

  return 0;

}

在上述代码实例中,我们使用了 SetupDiGetClassDevs、SetupDiEnumDeviceInfo 和 SetupDiGetDeviceRegistryProperty 函数来获取设备名称。这个例子的输出结果类似于:“Device: USB Mass Storage Device”。

总之,在使用 C++ 来获取 USB 设备名称时,我们需要通过调用 Windows 的 API 来实现。我们可以通过使用 SP_DEVICE_INTERFACE_DATA 和 SP_DEVICE_INTERFACE_DETAIL_DATA 结构体,调用 CreateFile 和 DeviceIoControl 函数来获取 USB 设备名称。通过上述例子,您可以更好地理解如何使用 C++ 来获取 USB 设备名称。

  
  

评论区

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