VC usb通信有关问题 createfile 失败 急半小时内结贴

VC usb通信问题 createfile 失败 急!!!半小时内结贴
本帖最后由 qiuyue_001 于 2013-03-05 17:26:44 编辑
GUID guidHID;
HidD_GetHidGuid(&guidHID);
m_strLog += _T("HID类的GUID标识为\r\n");

// 准备查找符合HID规范的USB设备
HDEVINFO hDevInfo = SetupDiGetClassDevs(&guidHID,NULL,0,
DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);

UINT nIndex = 0;

// 查找USB设备接口
SP_DEVICE_INTERFACE_DATA strtInterfaceData;
strtInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);

BOOL bSuccess = SetupDiEnumDeviceInterfaces(hDevInfo,NULL,&guidHID,0,
&strtInterfaceData);
int a =GetLastError();
if (!bSuccess)
{
m_strLog += _T("抱歉,未找到可用的USB设备");
SetupDiDestroyDeviceInfoList(hDevInfo);
return;
}

// 若找到了设备,则读取设备路径名

DWORD Length =0;
PSP_DEVICE_INTERFACE_DETAIL_DATA strtDetailData;
SetupDiGetDeviceInterfaceDetail(hDevInfo,&strtInterfaceData,
NULL,0,&Length,NULL);
strtDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)LocalAlloc(LMEM_ZEROINIT,Length);
strtDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
if (!SetupDiGetDeviceInterfaceDetail(hDevInfo,&strtInterfaceData,
strtDetailData,Length,NULL,NULL))
{
int a =GetLastError();
AfxMessageBox(_T("查找设备路径时出错!"));
SetupDiDestroyDeviceInfoList(hDevInfo);
return;
}
 a =GetLastError();
CString str;
CString str1;
str.Format(_T("%s"),strtDetailData->DevicePath);


// 开放与设备的通信

//获取的设备号为
//str = "\\?\hid#vid_05e0&pid_1200#6&8342214&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}";

//以上都没有问题 
HANDLE hCom = CreateFile(str,GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);

if (hCom == INVALID_HANDLE_VALUE)

{
int a =GetLastError();
//a= 5  一直卡在这
AfxMessageBox(_T("无法打开通信端口"));
SetupDiDestroyDeviceInfoList(hDevInfo);
return;
}
请问是什原因?

------解决方案--------------------
权限,用管理员权限执行。
------解决方案--------------------
兄弟你好,你的问题解决没有呢?

如何解决呢?

谢谢!
------解决方案--------------------
不是所有的 Hid 设备你都可以 Open 的。
所以,你应该判断是否是你自己可以访问的设备。
难道你需要把 Hid 的键盘和鼠标都 Open 一次吗?

所以,在访问之前判断一下。
------解决方案--------------------
引用:
不是所有的 Hid 设备你都可以 Open 的。
所以,你应该判断是否是你自己可以访问的设备。
难道你需要把 Hid 的键盘和鼠标都 Open 一次吗?

所以,在访问之前判断一下。


saleayas,我也是网上找的usb的代码在研究,我这边有U盘,和usb 的其他设备,可是为什么每次找到的hid标识总是一样的呢?谢谢。
------解决方案--------------------
因为他们都是 Hid 设备。所以才需要去枚举。
所以需要去匹配 VID, PID 等等。
还需要去匹配你的设备的特定的数据。
诸如 ProductString,SerialNumberString 和 其他的 IndexedString。
以及 Device's Capalibilities。

不是找到一个就是你的,需要去枚举的。

正如 SetupDiEnumDeviceInfo 函数所字面上的意思。
------解决方案--------------------
引用:
因为他们都是 Hid 设备。所以才需要去枚举。