我已设法检查是否通过WM_DEVICECHANGE
插入了USB设备。
case WM_DEVICECHANGE:
{
PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam;
switch(wParam)
{
case DBT_DEVICEARRIVAL:
{
if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
// Get Information about the usb device inserted
}
return TRUE;
}
}
}
现在,我想确保通过匹配某种ID来插入正确的USB设备,并且我还需要检查USB设备上的可用空间。
我能说的一个解决方案是迭代所有硬件设备,直到一个与信息匹配。
还有其他方法可以在插入时识别设备吗?
答案 0 :(得分:3)
使用DBT_DEVTYP_DEVICEINTERFACE消息发送VID和PID。然后,您可以通过SetupDiGetClassDevs / SetupDiEnumDeviceInfo / SetupDiGetDeviceInstanceId / SetupDiGetDeviceRegistryProperty查看设备驱动程序以获取更多信息。
连接时无需提供媒体。考虑一下读卡器,它会注册驱动器号,但是在插入卡并且Windows生成GUID_IO_MEDIA_ARRIVAL device event之前,驱动器将不会准备就绪。然后,您可以在驱动器号上调用GetDiskFreeSpaceEx以获得可用空间。