阅读:2209回复:6
请大家帮忙,hid设备应用程序查找vid,pid出错,谢谢
做了个Hid的设备测试(jb8),USBcheck检测都通过,用usbview软件也可以看到是“人机接口设备”,且可以识别出vid和pid,但用自己做的应用程序总是搜索不到此hid设备,和它放到他旁边usb接口的罗技鼠标可以找到,其vid应该是046d,但显示出来是13987。而我的hid设备根本检测不到,用前面的usbport程序结果也是如此,而在注册表里我已经看到了这两个设备
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É豸½Ó¿Ú SP_DEVICE_INTERFACE_DATA strtInterfaceData; strtInterfaceData.cbSize = sizeof(strtInterfaceData); BOOL bSuccess = SetupDiEnumDeviceInterfaces(hDevInfo,NULL,&guidHID,0, &strtInterfaceData); if (!bSuccess) { m_strLog += _T("±§Ç¸£¬Î´ÕÒµ½¿ÉÓõÄUSBÉ豸"); SetupDiDestroyDeviceInfoList(hDevInfo); return; } DWORD Length; //****************************************************// // SetupDiGetDeviceInterfaceDetail setupapi.dll // // ´«»ØÉ豸µÄÂ?¾¶ // //****************************************************// SetupDiGetDeviceInterfaceDetail(hDevInfo,&strtInterfaceData, NULL,0,&Length,NULL); PSP_DEVICE_INTERFACE_DETAIL_DATA strtDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA) malloc(Length); strtDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); if (!SetupDiGetDeviceInterfaceDetail(hDevInfo,&strtInterfaceData, strtDetailData,Length,NULL,NULL)) { //AfxMessageBox(_T("²éÕÒÉ豸Â?¾¶Ê±³ö´í!")); MessageBox("Not find the path of device!","Error",MB_ICONERROR); 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); } 那位兄弟遇到过这个情况 |
|
沙发#
发布于:2004-09-27 16:58
顶顶
|
|
板凳#
发布于:2004-09-27 13:31
你是用D12+8051吗? 我用的是moto的jb8,字带usb模块阿 |
|
地板#
发布于:2004-09-27 13:00
到www.winchiphead.com上你会找到答案的
|
|
地下室#
发布于:2004-09-27 12:56
你是用D12+8051吗?
|
|
5楼#
发布于:2004-09-27 12:12
请大侠们帮帮忙吧!
|
|
6楼#
发布于:2004-09-27 10:35
这是显示的图片
到底我还需要做一个驱动程序嘛还是直接作应用程序就可以了(这个显示可不可以不出现呢?) |
|