suncom
驱动牛犊
驱动牛犊
  • 注册日期2005-07-12
  • 最后登录2005-07-14
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1381回复:1

急!!!关于检索usb设备的问题

楼主#
更多 发布于:2005-07-14 17:31
  这是我用于检索USB设备的函数,可是它无法检索到我插入的usb设备,如:U盘.请教解决的办法

void CTestUSBDlg::OnShowusbhid()
{
       // TODO: Add your control notification handler code here
       m_showMessage.Empty();
       //ShowHidInfo();
      
       GUID guidHID;
       HidD_GetHidGuid(&guidHID);
       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]);

       ShowMessage(strShow);

       HDEVINFO hDevInfo = SetupDiGetClassDevs(&guidHID,NULL,0,
              DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
    
       UINT nIndex = 0;
       ShowMessage("正在查找可用的USB设备...\r\n");
      
       SP_DEVICE_INTERFACE_DATA strtInterfaceData;
       BOOL bSuccess = SetupDiEnumDeviceInterfaces(hDevInfo,NULL,&guidHID,0,
              &strtInterfaceData);
      
       if(!bSuccess){

              ShowMessage("抱歉,未找到可用的USB设备");
              SetupDiDestroyDeviceInfoList(hDevInfo);
              return;
       }

       SP_DEVICE_INTERFACE_DETAIL_DATA strtDetailData;
       if (!SetupDiGetDeviceInterfaceDetail(hDevInfo,&strtInterfaceData,
              &strtDetailData,sizeof(strtDetailData),NULL,NULL))
       {
              AfxMessageBox(_T("查找设备路径时出错!"));
              SetupDiDestroyDeviceInfoList(hDevInfo);
              return;
       }

       CString SDevicePath = strtDetailData.DevicePath;
       SDevicePath = "可以通过路径%s访问设备\r\n" + SDevicePath;
       ShowMessage(SDevicePath);

       HANDLE hCom = CreateFile(SDevicePath,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;
       ShowMessage("正在读取设备的标识...\r\n");

       if (!HidD_GetAttributes(hCom,&strtAttrib))
       {
              AfxMessageBox(_T("查询设备状态时出错!"));
              CloseHandle(hCom);
              SetupDiDestroyDeviceInfoList(hDevInfo);
       }

       ShowMessage("已读取,见右边所示\r\n");

       CString strShow1;
       strShow1.Format("0x%x",strtAttrib.VendorID);
       ShowMessage(strShow1);
       strShow1.Format("0x%x",strtAttrib.ProductID);
       ShowMessage(strShow1);
       strShow1.Format("%d",strtAttrib.VersionNumber);
       ShowMessage(strShow1);

       CloseHandle(hCom);
       SetupDiDestroyDeviceInfoList(hDevInfo);
}
josenhuang
驱动牛犊
驱动牛犊
  • 注册日期2003-08-25
  • 最后登录2008-11-06
  • 粉丝0
  • 关注0
  • 积分46分
  • 威望9点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-07-14 17:36
参考DDK 中USBVIEW的代码就可以了。
游客

返回顶部