如何才能获得HID设备名呢?

cds27 2009-08-13 10:28:28
如何才能获得HID设备名呢?
我说的设备名是指,在设备管理器中看到的名字。如人体学输入设备下的“USB人体学输入设备”,这个“USB人体学输入设备”要怎么获得?
我现在可以得到PSP_INTERFACE_DEVICE_DETAIL_DATA,但不知道怎么取得这个名字。
...全文
400 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
MoXiaoRab 2009-08-13
  • 打赏
  • 举报
回复
看这个


代码
/*名称: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
cds27 2009-08-13
  • 打赏
  • 举报
回复
类似的文章我看很多了。
上文中提到的“但不知道为什么xp下却不能获得USB鼠标的信息。”,其实就是因为鼠标和键盘在系统下是独占的,CreateFile是不能打开的。
而上文的前提都是在CreateFile之后的事。

有没有什么其他的办法获得设备名呢?
bohut 2009-08-13
  • 打赏
  • 举报
回复
bohut 2009-08-13
  • 打赏
  • 举报
回复
USB Human Interface Devices, Revision 1.11:
http://www.usb.org/developers/devclass_docs/HID1_11.pdf
MoXiaoRab 2009-08-13
  • 打赏
  • 举报
回复
你要获得这个做什么?DeviceTree用过吗?看看那个行不行,我没试过
cds27 2009-08-13
  • 打赏
  • 举报
回复
楼上给的这个例子,也是跟2楼那个存在一样的问题。
鼠标和键盘是读不到的。

没有设备名的话,有没有办法通过设备路径得出设备类型呢?
在设备路径中,其实已经包含了VID和PID了。

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧