资源描述:
《编写在USB接口读写数据的C++程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、使用一个GUIDguidHID_1查找并打开一个USB设备extern"C"intPASCALSearchUSBDevice(){HANDLEhUsb;intnCount,i,j;//标记同一设备个数HDEVINFOhDevInfoSet;BOOLbResult;PSP_DEVICE_INTERFACE_DETAIL_DATApDetail=NULL;memset(m_sysversion,0,20);GetSysVersion(m_sysversion);//检索相关GUID的USB设备总设备个数if(!GetUSBList()){return0;}//取得一个该GUID相关
2、的设备信息集句柄hDevInfoSet=::SetupDiGetClassDevs((LPGUID)&guidHID_1,//GUID_CLASS_USB_DEVICE,//classGUIDNULL,//无关键字NULL,//不指定父窗口句柄DIGCF_PRESENT
3、DIGCF_DEVICEINTERFACE);//目前存在的设备//失败...if(hDevInfoSet==INVALID_HANDLE_VALUE){returnNULL;}//申请设备接口数据空间nCount=0;bResult=TRUE;for(i=0;i<34;i++){bDeviceOpen[i]=
4、FALSE;memset(m_DeviceDesc[i],0,256);}SP_DEVICE_INTERFACE_DATAifdata;//设备序号=0,1,2...逐一测试设备接口,到失败为止while(bResult){ifdata.cbSize=sizeof(ifdata);//枚举符合该GUID的设备接口bResult=::SetupDiEnumDeviceInterfaces(hDevInfoSet,//设备信息集句柄NULL,//不需额外的设备描述(LPGUID)&guidHID_1,//GUID_CLASS_USB_DEVICE,//GUID(ULONG)nCou
5、nt,//设备信息集里的设备序号&ifdata);//设备接口信息if(bResult){ULONGpredictedLength=0;ULONGrequiredLength=0;//取得该设备接口的细节(设备路径)bResult=SetupDiGetInterfaceDeviceDetail(hDevInfoSet,//设备信息集句柄&ifdata,//设备接口信息NULL,//设备接口细节(设备路径)0,//输出缓冲区大小&requiredLength,//不需计算输出缓冲区大小(直接用设定值)NULL);//不需额外的设备描述//取得该设备接口的细节(设备路径)predi
6、ctedLength=requiredLength;//if(pDetail)//{//pDetail=NULL;//}pDetail=(PSP_INTERFACE_DEVICE_DETAIL_DATA)::GlobalAlloc(LMEM_ZEROINIT,predictedLength);pDetail->cbSize=sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);bResult=SetupDiGetInterfaceDeviceDetail(hDevInfoSet,//设备信息集句柄&ifdata,//设备接口信息pDetail,//设备
7、接口细节(设备路径)predictedLength,//输出缓冲区大小&requiredLength,//不需计算输出缓冲区大小(直接用设定值)NULL);//不需额外的设备描述if(bResult){//复制设备路径到输出缓冲区//::strcpy(pszDevicePath[nCount],pDetail->DevicePath);if(strcmp(m_sysversion,"winnt")==0){charch[18];for(i=0;i<17;i++){ch[i]=*(pDetail->DevicePath+8+i);}ch[17]=' ';if(strcmp(ch
8、,"vid_0471&pid_0666")==0)//比较版本号,防止意外出错{memset(&READ_OS,0,sizeof(OVERLAPPED));memset(&WRITE_OS,0,sizeof(OVERLAPPED));READ_OS.hEvent=CreateEvent(NULL,//nosecurityTRUE,//explicitresetreqFALSE,//initialeventresetNULL);//nonameif(READ_OS.hEvent==NULL){