如何在MFC应用程序中通过编程方式枚举USB-HID设备并列出它们?请提供详细的步骤和代码示例。
时间: 2024-11-02 12:21:43 浏览: 15
在MFC应用程序中枚举USB-HID设备,需要利用Windows提供的Setup API来获取系统中所有符合HID类规范的设备列表。首先,需要包含头文件Setupapi.h,并确保链接到Setupapi.lib库。以下是详细的步骤和代码示例:
参考资源链接:[MFC实现USB HID设备读写教程](https://wenku.csdn.net/doc/43obevjoy5?spm=1055.2569.3001.10343)
1. 获取设备接口信息的句柄:
使用`SetupDiGetClassDevs`函数,传入HID类的GUID,来获取所有HID设备的设备信息集合。这需要HID GUID常量,通常定义为`GUID_DEVINTERFACE_HID`。
示例代码:
```cpp
HDEVINFO hDevInfo = SetupDiGetClassDevs(&GUID_DEVINTERFACE_HID, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
if (hDevInfo == INVALID_HANDLE_VALUE) {
// 处理错误情况
}
```
2. 获取设备接口数据:
使用`SetupDiEnumDeviceInterfaces`函数遍历所有枚举到的设备,获取每个设备的接口数据(`SP_DEVICE_INTERFACE_DATA`)。
示例代码:
```cpp
SP_DEVICE_INTERFACE_DATA deviceInterfaceData;
ZeroMemory(&deviceInterfaceData, sizeof(deviceInterfaceData));
deviceInterfaceData.cbSize = sizeof(deviceInterfaceData);
for (DWORD i = 0; SetupDiEnumDeviceInterfaces(hDevInfo, NULL, &GUID_DEVINTERFACE_HID, i, &deviceInterfaceData); i++) {
// 处理每个枚举到的设备
}
```
3. 获取设备接口详细数据:
使用`SetupDiGetDeviceInterfaceDetail`函数获取每个设备接口的详细数据(`SP_DEVICE_INTERFACE_DETAIL_DATA`),以便进一步打开设备进行通信。
示例代码:
```cpp
SP_DEVICE_INTERFACE_DETAIL_DATA *pDetailedData = NULL;
SP_DEVINFO_DATA deviceInfoData;
ZeroMemory(&deviceInfoData, sizeof(deviceInfoData));
deviceInfoData.cbSize = sizeof(deviceInfoData);
DWORD dwSize = 0;
SetupDiGetDeviceInterfaceDetail(hDevInfo, &deviceInterfaceData, NULL, 0, &dwSize, &deviceInfoData);
pDetailedData = (SP_DEVICE_INTERFACE_DETAIL_DATA*)malloc(dwSize);
pDetailedData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
if (!SetupDiGetDeviceInterfaceDetail(hDevInfo, &deviceInterfaceData, pDetailedData, dwSize, &dwSize, &deviceInfoData)) {
// 处理错误情况
}
// 现在有了设备详细数据,可以使用CreateFile打开设备进行后续操作
```
4. 打开设备句柄:
调用`CreateFile`函数,使用上一步获取的设备接口详细数据打开设备句柄,进行读写操作。
示例代码:
```cpp
HANDLE hDevice = CreateFile(pDetailedData->DevicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hDevice == INVALID_HANDLE_VALUE) {
// 处理错误情况
}
// 使用hDevice进行数据传输等操作
```
完成设备枚举和数据获取后,可以将设备信息添加到MFC的列表控件中,以便用户查看。记得在操作完成后,释放相关资源,比如关闭设备句柄和清理设备信息集合。
以上步骤和示例代码展示了如何在MFC应用程序中枚举USB-HID设备,并获取足够的信息来进一步与设备进行通信。如果希望深入理解如何读写HID设备数据,可以参考《MFC实现USB HID设备读写教程》。这份资源详细描述了整个流程,从设备枚举到数据传输,适合初学者参考学习。
参考资源链接:[MFC实现USB HID设备读写教程](https://wenku.csdn.net/doc/43obevjoy5?spm=1055.2569.3001.10343)
阅读全文