如何才能获得HID设备名呢?
我说的设备名是指,在设备管理器中看到的名字。如人体学输入设备下的“USB人体学输入设备”,这个“USB人体学输入设备”要怎么获得?
我现在可以得到PSP_INTERFACE_DEVICE_DETAIL_DATA,但不知道怎么取得这个名字。

解决方案 »

  1.   

    USB有关的编程
    http://www.vckbase.com/document/viewdoc/?id=1282
      

  2.   

    类似的文章我看很多了。
    上文中提到的“但不知道为什么xp下却不能获得USB鼠标的信息。”,其实就是因为鼠标和键盘在系统下是独占的,CreateFile是不能打开的。
    而上文的前提都是在CreateFile之后的事。有没有什么其他的办法获得设备名呢?
      

  3.   

    看这个
    代码
    /*名称:GetDevPath
     功能:获取设备路径
     参数:MemberIndex 设备列表的索引,txtpath文本缓存,以字符串保存设备路径
     返回:-2表示结束,-1 表示不能获取GUID,0表示未找到设备,>0表示成功,且返回值为路径字符串长度
    */
    int HidDevice::GetDevPath(DWORD MemberIndex,char *txtpath)
    {
        int    ret;
        DWORD Length,Required;
        
        //获GUID
        HidD_GetHidGuid(&HidGuid);
        hDevInfo=SetupDiGetClassDevs(&HidGuid,NULL,NULL,DIGCF_PRESENT|DIGCF_INTERFACEDEVICE);
        if (hDevInfo == INVALID_HANDLE_VALUE)
        {
           return -1;
        }
        //枚举设备
        ret=SetupDiEnumDeviceInterfaces(hDevInfo,0,&HidGuid,MemberIndex,&devInfoData);
        if (!ret)
           if(MemberIndex==1)
           {
           // MessageBox(NULL,"未找到任何可用USB设备!",NULL,NULL);
               return 0;
           }
           else
               return -2;
        //获detaildata结构数组的长度
        SetupDiGetDeviceInterfaceDetail(hDevInfo,&devInfoData,NULL,0,&Length,NULL);
        detailData=(PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(Length);
        detailData->cbSize=sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
        //获detailData
        ret=SetupDiGetDeviceInterfaceDetail(hDevInfo,&devInfoData,detailData,Length,&Required,NULL);
        strcpy(txtpath,detailData->DevicePath);
     
        return strlen(txtpath);
    }
    http://blog.csdn.net/skdev/archive/2007/01/26/1494635.aspx
      

  4.   

    楼上给的这个例子,也是跟2楼那个存在一样的问题。
    鼠标和键盘是读不到的。没有设备名的话,有没有办法通过设备路径得出设备类型呢?
    在设备路径中,其实已经包含了VID和PID了。
      

  5.   

    你要获得这个做什么?DeviceTree用过吗?看看那个行不行,我没试过
      

  6.   

    USB Human Interface Devices, Revision 1.11:
    http://www.usb.org/developers/devclass_docs/HID1_11.pdf