简要说明:我的HID设备拥有许多顶级收藏。应用程序不断查询收集详细信息。瓶颈是-SetupDiGetClassDevs()似乎非常慢。详细说明:我的代码基本遵循MSrecommendations关于如何查找和获取HID集合的句柄。然后,我使用这个句柄获取相应的预解析数据,从中获取我需要的数据。目前,每当用户需要获取数据(例如按钮数量、轴最小值/最大值)时,我的代码都会执行此操作。这是一项缓慢的业务。探查器清楚地表明罪魁祸首是SetupDiGetClassDevs(),它似乎非常慢。不可能保存句柄(或者我认为),因为它可能会阻止系统进行更改,例如删除设备或重新排列设备。我仍然需要看看如果
我已经在这个问题上工作了一个多月了。我想做什么:获取无故障连接到系统的HID设备的列表。发生了什么:SetupDiGetClassDevs间歇性地不返回任何设备(针对HID设备进行过滤时),而仅返回所讨论的特定进程。同时运行相同调用的其他进程运行完美。无论我如何努力,我都无法在干净的项目中重现此问题。背景:我是在Unity3D(游戏引擎)下运行的输入系统的作者。我的一个客户在他的(大型)项目中遇到了操纵杆热插拔的问题。在他的游戏的标题屏幕上,一切正常进行。加载第一个游戏级别后,Windows会间歇性地(看似随机地)报告零个HID设备。只要仍然连接当前Controller,输入就可以正常
是否有可能以某种方式从SetupDiGetClassDevs函数或相关函数中获取与CreateFile一起使用的接口(interface)字符串?我必须扫描连接到计算机的设备。 最佳答案 对于从SetupDiGetClassDevs返回的每个设备,您需要使用SetupDiEnumDeviceInterfaces枚举设备接口(interface),然后使用SetupDiGetDeviceInterfaceDetail检索详细数据。由SetupDiGetDeviceInterfaceDetail填充的SP_DEVICE_INTERFAC
根据MSDN文档,SetupDiGetClassDevs可以传递deviceinstanceID获得deviceinformationset对于特定设备:Toreturnonlyaspecificdevice,settheDIFCF_DEVICEINTERFACEflagandusetheEnumeratorparametertosupplythedeviceinstanceIDofthedevice.我通过解析来自WM_DEVICECHANGE的符号名称来获取设备实例ID留言DBT_DEVICEARRIVAL事件,我通过将结果ID与SetupDiGetDeviceInstanceId