请教一下,如何得到一个USB设备的Path name,也就是用CreateFile函数打开时的第一个参数。谢谢了!
解决方案 »
- 单文档视图区,如何嵌入(显示)另外一个基于对话框的应用程序窗口?
- VC...Release下的问题???
- 请问VS2005中 配置属性->常规->字符集中 Unicode和多字节字符有什么区别
- 关于VC的宏
- 为什么内存占用很高??
- SDK方式如何实现文本选中加亮(不借助控件)?
- 改变对话框中的多行文本输入框的默认换行键
- vs2010MFC 开发问题 下面是build信息 无法执行
- 我用ATL做的组件,在本机上可用,在别的机上不能用,为什么?
- 一个编译时候的错误,谁来帮帮我?
- 如何取得电脑的软件信息和硬件信息
- 急得很!用ODBC访问Excel中的单元格,为什么有些单元格明明有数值,但是用ODBC读去却读出空值来喃?
hDevInfo,
&devInfoData,
NULL,
0
&Length
NULL);
detailData=(PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(Length);
detailData->bSize=sizeof(PSP_DEVICE_INTERFACE_DETAIL_DATA);
Result=SetupDiGetDeviceInterfaceDetail(
hDevInfo,
&devInfoData,
detailData,
Length,
&Required,
NULL);
{
char *sInfo;
sInfo="正在查找系统中HID类的GUID标识...";
m_lbInfo.AddString(sInfo); GUID guidHID;
HidD_GetHidGuid(&guidHID); sInfo="->HID类的GUID标识为:";
m_lbInfo.AddString(sInfo); sprintf(sInfo,"%08x-%04x-%04x-%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x",
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_lbInfo.AddString(sInfo); HDEVINFO hDevInfo = SetupDiGetClassDevs(&guidHID,
NULL,
0,
DIGCF_PRESENT|DIGCF_DEVICEINTERFACE ); if(hDevInfo==INVALID_HANDLE_VALUE)
{
sInfo="查找USB设备出错!";
m_lbInfo.AddString(sInfo);
return;
}
else
{
sInfo="找到USB设备!";
m_lbInfo.AddString(sInfo);
}
UINT nIndex = 0; sInfo= "正在查找可用的USB设备...";
m_lbInfo.AddString(sInfo); SP_DEVICE_INTERFACE_DATA InterfaceData; InterfaceData.cbSize=sizeof(SP_DEVICE_INTERFACE_DATA);
BOOL bSuccess;
DWORD index=0;
for(int i=0;i<10;i++)
{
bSuccess = SetupDiEnumDeviceInterfaces(hDevInfo,
NULL,
&guidHID,
i,
&InterfaceData);
if (!bSuccess)
{
sInfo=" 连接USB设备出错!";
m_lbInfo.AddString(sInfo);
break;
}
else
{
if(InterfaceData.Flags==SPINT_ACTIVE )
{
sprintf(sInfo,"->连接 %d",index+1);
m_lbInfo.AddString(sInfo);
if(INVALID_HANDLE_VALUE!=GetUSBDeviceInfo(hDevInfo,InterfaceData) )
{
sInfo=" 测试已完成!";
m_lbInfo.AddString(sInfo);
}
index++;
}
}
}
sprintf(sInfo,"总共%d个设备连接",index);
m_lbInfo.AddString(sInfo);
}HANDLE CCCSUSBDlg::GetUSBDeviceInfo(HDEVINFO hDevInfo, SP_DEVICE_INTERFACE_DATA InterfaceData)
{
char *sInfo;
PSP_DEVICE_INTERFACE_DETAIL_DATA pDetailData; DWORD dwSize=0,dwRequieSize=0;
SetupDiGetDeviceInterfaceDetail(hDevInfo,
&InterfaceData,
NULL,
0,
&dwSize,
NULL); dwRequieSize=dwSize;
pDetailData=(PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(dwRequieSize);
pDetailData->cbSize=sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); //SP_DEVINFO_DATA InfoData;
//InfoData.cbSize=sizeof(SP_DEVINFO_DATA);
if (!SetupDiGetDeviceInterfaceDetail(hDevInfo,
&InterfaceData,
pDetailData,
dwSize,
&dwRequieSize,
NULL))
{
sInfo=" 查找设备路径时出错!";
m_lbInfo.AddString(sInfo);
//SetupDiDestroyDeviceInfoList(hDevInfo);
free(pDetailData);
}
char *sDevPath;
sDevPath=(pDetailData->DevicePath)+2;
*sDevPath='.';
sDevPath-=2;
sInfo=" 设备路径:";
m_lbInfo.AddString(sInfo);
sInfo=sDevPath;
m_lbInfo.AddString(sInfo);
sInfo=" 打开通信端口...";
m_lbInfo.AddString(sInfo); HANDLE hCom = CreateFile (sDevPath,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL); if (hCom == INVALID_HANDLE_VALUE)
{
sInfo=" 无法打开通信端口。不能读取设备信息!(设备连接可能不正确)";
m_lbInfo.AddString(sInfo);
free(pDetailData);
return hCom;
}
else
{
sInfo=" 打开通信端口成功!";
m_lbInfo.AddString(sInfo); HIDD_ATTRIBUTES Attribute;
Attribute.Size=sizeof(HIDD_ATTRIBUTES); sInfo=" 正在读取设备的标识...";
m_lbInfo.AddString(sInfo);
if(!HidD_GetAttributes(hCom,&Attribute))
{
sInfo=" 查询设备状态时出错!";
m_lbInfo.AddString(sInfo);
//CloseHandle(hCom); free(pDetailData);
return INVALID_HANDLE_VALUE;
}
return hCom;
CloseHandle(hCom);
}
}
NULL,
&guidHID,
i,
&InterfaceData);这里总是返回false请问是什么缘故??谢谢