思路其实很简单:通常我们使用PID和VID来获得不同设备的句柄,相同PID和VID的设备,就需要其他的特征来获取句柄。相同HID的设备,设备路径是不同的,可以用设备路径作为区分,来获得句柄即可。
HANDLE OpenSamePIDDevice(int overlapped, unsigned short Pid_Value)
{
int Pid_count = 0;
LPCWSTR device_path = NULL;
HANDLE hidHandle = NULL;
HidD_GetHidGuid(&hidGuid); //取得类别
HDEVINFO hDevInfo = SetupDiGetClassDevs(&hidGuid, NULL, NULL,
(DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)); //获取设备信息群
if (hDevInfo == INVALID_HANDLE_VALUE)//未获得设备信息群则直接退出
return INVALID_HANDLE_VALUE;
SP_DEVICE_INTERFACE_DATA devInfoData;
devInfoData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
int deviceNo = 0;
SetLastError(NO_ERROR);
while (GetLastError() != ERROR_NO_MORE_ITEMS)
{
if (SetupDiEnumInterfaceDevice(hDevInfo, 0, &hidGuid, deviceNo, &devInfoData)) //枚举成功?
{
ULONG requiredLength = 0;
SetupDiGetInterfaceDeviceDetail(hDevInfo, &