小弟想请教一下怎么用VC操纵usb设备读写
解决方案 »
- 计算机本科考第二本科学(工商企业管理)历有前途吗?
- 求文字自下而上滚动,临界程序界面边界时那种淡入淡出的效果(类似于电影字幕)的实现算法,就像千千静听的非迷你模式下的歌词面板歌词滚动效果一样!
- 请问如何获得socket的数据传输速度
- 最近脑子里都是tab控件,再次求助!!!
- 关于串口通信的问题
- COleDateTime控件显示格式的问题
- 共享内存需要释放吗?
- 多文档下如何切换窗口?
- 如何用VC来捕捉到网页中各元素(如IHTMLInputTextElement接口对应的Inut元素)上发生的事件
- 哪里有类似VC.NET的string table的类? 来者有分! 在线等待
- 如何用C++绘制计算数据的折线图
- vc画一个简单三维的抛物曲线
查找设备:
m_infor=_T("");
// TODO: Add your control notification handler code here
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]);
m_infor+= _T("1.HID类的GUID标识为:\r\n ")+strShow+_T("\r\n");
m_infor+=_T("2.获得全部HID信息……\r\n ");
HDEVINFO hDevInfo;
hDevInfo=SetupDiGetClassDevs(&guidHID,NULL,NULL,DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
if (hDevInfo == INVALID_HANDLE_VALUE) // 查询全部HID信息失败
{
m_infor+=_T("查询失败 - SetupDiGetClassDevs()");
return ;
}
m_infor=m_infor+_T("获得成功!\r\n")+_T("\r\n")+_T("3.获得特定HID识别信息……\r\n "); SP_INTERFACE_DEVICE_DATA ifdata;
ifdata.cbSize = sizeof(ifdata);
DWORD devindex;
for (devindex = 0;SetupDiEnumDeviceInterfaces(hDevInfo, NULL, &guidHID,devindex, &ifdata); ++devindex)
{
CString num;
num.Format(_T("第(%d)个设备:\r\n "),devindex+1);
m_infor+=num;
DWORD needed;
SetupDiGetDeviceInterfaceDetail(hDevInfo, &ifdata, NULL, 0,&needed, NULL);
PSP_INTERFACE_DEVICE_DETAIL_DATA detail = (PSP_INTERFACE_DEVICE_DETAIL_DATA) malloc(needed);
detail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
SP_DEVINFO_DATA did = {sizeof(SP_DEVINFO_DATA)};
SetupDiGetDeviceInterfaceDetail(hDevInfo, &ifdata, detail,needed, NULL, &did);
CString devPath(detail->DevicePath);
m_infor+=_T("设备路径:")+devPath+_T("\r\n ");
///////////////////////////////////////////////////////
TCHAR fname[256];
if (!SetupDiGetDeviceRegistryProperty(hDevInfo, &did,SPDRP_FRIENDLYNAME, NULL, (PBYTE) fname, sizeof(fname), NULL)
&& !SetupDiGetDeviceRegistryProperty(hDevInfo, &did, SPDRP_DEVICEDESC,NULL, (PBYTE) fname, sizeof(fname), NULL))
_tcsncpy(fname, detail->DevicePath, 256);
fname[255] = 0;
m_infor+=_T(" 设备类型:");
m_infor+=fname;
m_infor+=_T("\r\n ");
//CDeviceListEntry e(detail->DevicePath, fname);
free((PVOID) detail);
////////////////////////////////////////////////////////
HANDLE hand1 = CreateFile(devPath, GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL);
if (hand1 == INVALID_HANDLE_VALUE)
{
m_infor+=_T(" CreateFile() - 打开失败!\r\n ");
continue;
}
else
{
m_infor+=_T(" CreateFile() - 打开成功!\r\n ");
}
HIDD_ATTRIBUTES attr = {sizeof(HIDD_ATTRIBUTES)};
BOOLEAN okay = HidD_GetAttributes(hand1, &attr);
if (okay)
{
CString tem;
tem.Format("ProductID:%x ,VendorID:%X ,VersionNumber: %x",attr.ProductID,attr.VendorID,attr.VersionNumber);
m_infor+=_T(" ")+tem+_T("\r\n ");
if (attr.ProductID==0x100 && attr.VendorID==0x930A)
{
hand=hand1;
m_receive.EnableWindow();
m_send.EnableWindow();
m_close.EnableWindow();
} }
///////////////////////////////////////////////////////获得设备能力
m_infor+=_T(" 获得设备能力……\r\n ");
PHIDP_PREPARSED_DATA PreparsedData;
if(HidD_GetPreparsedData(hand1,&PreparsedData))
{
m_infor+=_T(" HidD_GetPreparsedData() - 调用成功! \r\n ");
}
Cap=new HIDP_CAPS;
HidP_GetCaps(PreparsedData,Cap);
m_infor+=_T(" HidP_GetCaps() - 调用成功! \r\n");
CString tmp;
tmp.Format("\
Usage:%d \r\n\
UsagePage:%d \r\n\
InputReportByteLength:%d \r\n\
OutputReportByteLength:%d \r\n\
FeatureReportByteLength:%d \r\n\
NumberLinkCollectionNodes:%d \r\n\
NumberInputButtonCaps:%d \r\n\
NumberInputValueCaps:%d \r\n\
NumberInputDataIndices:%d \r\n\
NumberOutputButtonCaps:%d \r\n\
NumberOutputValueCaps:%d \r\n\
NumberOutputDataIndices:%d \r\n\
NumberFeatureButtonCaps:%d \r\n\
NumberFeatureValueCaps:%d \r\n\
NumberFeatureDataIndices:%d \r\n",
Cap->Usage,
Cap->UsagePage,
Cap->InputReportByteLength,
Cap->OutputReportByteLength,
Cap->FeatureReportByteLength,
Cap->NumberLinkCollectionNodes,
Cap->NumberInputButtonCaps,
Cap->NumberInputValueCaps,
Cap->NumberInputDataIndices,
Cap->NumberOutputButtonCaps,
Cap->NumberOutputValueCaps,
Cap->NumberOutputDataIndices,
Cap->NumberFeatureButtonCaps,
Cap->NumberFeatureValueCaps,
Cap->NumberFeatureDataIndices);
m_infor+=tmp;
/////////////////////////////////////////////////////////
}
SetupDiDestroyDeviceInfoList(hDevInfo);
UpdateData(FALSE);