阅读:3640回复:11
请问获取USB设备的GUID 的API 是什么啊?
刚刚接触USB编程, 有个问题, 我想获得刚刚插上的USB设备的GUID , 但是查了一会没查到, 请问谁能帮我一下, 感谢!
|
|
沙发#
发布于:2004-03-04 15:29
一般你自己写驱动,自己去定义guid
|
|
|
板凳#
发布于:2004-03-04 15:54
查查这几个函数:
SetupDiGetClassDevs SetupDiEnumDeviceInterfaces SetupDiGetDeviceInterfaceDetail |
|
|
地板#
发布于:2004-03-04 16:24
谢谢各位。
|
|
地下室#
发布于:2004-03-04 20:47
我在程序用下面的语句来实现获得设备的供应商id和产品id和版本号,却一直不能实现,连设备的GUID都未能获得,请高手一定要帮我啊~~在下感激不尽~~``
代码: void CUSBPortDlg::OnSearch() { // TODO: Add your control notification handler code here m_strLog.Empty(); m_strLog = _T("正在查找系统中HID类的GUID标识...\r\n"); SetDlgItemText(IDC_EDIT_REPORT,m_strLog); // 查找本系统中HID类的GUID标识 GUID guidHID; HidD_GetHidGuid(&guidHID); m_strLog += _T("HID类的GUID标识为\r\n"); CString strShow; strShow.Format("%08x-%04x-%04x-%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x\r\n", guidHID.Data1,guidHID.Data2,guidHID.Data3,guidHID.Data4[0], guidHID.Data4[1],guidHID.Data4[2],guidHID.Data4[3],guidHID.Data4[4], guidHID.Data4[5],guidHID.Data4[6],guidHID.Data4[7]); m_strLog += strShow; SetDlgItemText(IDC_EDIT_REPORT,m_strLog); // 准备查找符合HID规范的USB设备 HDEVINFO hDevInfo = SetupDiGetClassDevs(&guidHID,NULL,0, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); UINT nIndex = 0; m_strLog += _T("正在查找可用的USB设备...\r\n"); SetDlgItemText(IDC_EDIT_REPORT,m_strLog); // 查找USB设备接口 for(int i=0;i<10;i++) { SP_DEVICE_INTERFACE_DATA strtInterfaceData; BOOL bSuccess = SetupDiEnumDeviceInterfaces(hDevInfo,NULL,&guidHID,0, &strtInterfaceData); if (!bSuccess) { m_strLog += _T("抱歉,未找到可用的USB设备"); SetupDiDestroyDeviceInfoList(hDevInfo); return; } // 若找到了设备,则读取设备路径名 SP_DEVICE_INTERFACE_DETAIL_DATA strtDetailData; if (!SetupDiGetDeviceInterfaceDetail(hDevInfo,&strtInterfaceData, &strtDetailData,sizeof(strtDetailData),NULL,NULL)) { AfxMessageBox(_T("查找设备路径时出错!")); SetupDiDestroyDeviceInfoList(hDevInfo); return; } // 找到了设备路径 m_strPath = strtDetailData.DevicePath; strShow.Format("可以通过路径%s访问设备\r\n",m_strPath); m_strLog += strShow; SetDlgItemText(IDC_EDIT_REPORT,m_strLog); // 开放与设备的通信 HANDLE hCom = CreateFile(m_strPath,GENERIC_READ | GENERIC_WRITE, 0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if (hCom = INVALID_HANDLE_VALUE) { AfxMessageBox(_T("无法打开通信端口")); SetupDiDestroyDeviceInfoList(hDevInfo); return; } // 查询设备标识 HIDD_ATTRIBUTES strtAttrib; m_strPath += _T("正在读取设备的标识...\r\n"); SetDlgItemText(IDC_EDIT_REPORT,m_strPath); if (!HidD_GetAttributes(hCom,&strtAttrib)) { AfxMessageBox(_T("查询设备状态时出错!")); CloseHandle(hCom); SetupDiDestroyDeviceInfoList(hDevInfo); } // 将有关该设备的标识显示出来 m_strPath += _T("已读取,见右边所示\r\n"); SetDlgItemText(IDC_EDIT_REPORT,m_strPath); // 显示供应商标识 strShow.Format("0x%x",strtAttrib.VendorID); SetDlgItemText(IDC_ID_VENDOR,strShow); // 显示产品标识 strShow.Format("0x%x",strtAttrib.ProductID); SetDlgItemText(IDC_ID_PRODUCT,strShow); // 显示产品版本号 strShow.Format("%d",strtAttrib.VersionNumber); SetDlgItemText(IDC_ID_VERSION,strShow); // 释放资源 CloseHandle(hCom); SetupDiDestroyDeviceInfoList(hDevInfo); } } 同时我已经把hid.dll和setupapi.dll加入到工程中来了啊,还是不行~~~ |
|
|
5楼#
发布于:2004-03-04 20:56
可能代码有点长,伤害了您的眼睛,我对此深表歉意~~~~~
小弟苦想了好几天,还是找不出是什么问题,小弟也是刚接触usb方面的东西!~~还望各位高手多多指教~~~ 我的emai:sheng4545@eyou.com 不过最近病毒邮件病毒比较猖狂,所以还望各位大哥大姐写标题的时候加上"usb"字样,小弟感激不尽~~~ |
|
|
6楼#
发布于:2004-03-05 15:52
我看过这个程序,不过在我的计算机上面也找不到设备。就算连U盘也检测不到。我自己挂上的USB设备也检测不到。可能是程序的问题。
|
|
|
7楼#
发布于:2004-03-05 16:17
回author22, sheng4545: 我前阵子也是比较痛苦的, 不过好在有同事指导了一下, 在XP DDK下, 有一个文件, 路径是: /XPDDK/src/general/tamaster/exe/notify , 里面的文件看一看, 你会受启发的。 |
|
8楼#
发布于:2004-03-06 19:13
谢谢你的建议,但是我在我自己的机子上找不到什么XPDDK啊~~
那个是不是一个下载的什么软件啊~~~ 还是装xp操作系统的时候就装好了呢?? |
|
|
9楼#
发布于:2004-03-06 20:00
XP DDK 是微软的driver develop kit , 是要重新安装的软件, 比较大, 不知道微软的网站有没有, 我是装公司的。 你最好装一下,很实用的。 比较大哦!
|
|
10楼#
发布于:2005-03-17 10:50
Module:
Public Type GUID Data1 As Long Data2 As Integer Data3 As Integer Data4(7) As Byte End Type Form: Dim HidGuid As GUID Result = HidD_GetHidGuid(HidGuid) GUIDString = _ Hex$(HidGuid.Data1) & \"-\" & _ Hex$(HidGuid.Data2) & \"-\" & _ Hex$(HidGuid.Data3) & \"-\" For Count = 0 To 7 \'Ensure that each of the 8 bytes in the GUID displays two characters. If HidGuid.Data4(Count) >= &H10 Then GUIDString = GUIDString & Hex$(HidGuid.Data4(Count)) & \" \" Else GUIDString = GUIDString & \"0\" & Hex$(HidGuid.Data4(Count)) & \" \" End If Next Count Msgbox GUIDString \'GUIDString is GUID information |
|
11楼#
发布于:2005-03-17 13:13
HID的设备直接用HidD_GetHidGuid就可以获得GUID
当然,你要再检测PID,VID看是否是你自己的设备 [编辑 - 3/17/05 by coolwuya] |
|
|