如何用VC编写实现USB设备的读写操作? 你那个USB设备应该会有一个名字,打开那个名字就可以了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 int k = 0; DWORD MaxDriveSet, CurDriveSet; DWORD drive, drivetype; TCHAR szBuf[300]; HANDLE hDevice; PSTORAGE_DEVICE_DESCRIPTOR pDevDesc; char* p; CString str; for(k=0; k<26; k++) szMoveDiskName[k] = '\0'; k = 1; MaxDriveSet = CurDriveSet = 0; MaxDriveSet = GetLogicalDrives(); CurDriveSet = MaxDriveSet; for ( drive = 0; drive < 32; ++drive ) { if ( MaxDriveSet & (1 << drive) ) { DWORD temp = 1<<drive; _stprintf( szDrvName, _T("%c:\\"), 'A'+drive ); if(GetDriveType( szDrvName )== DRIVE_REMOVABLE) { drivetype = DRVREMOVE; sprintf(szBuf, "\\\\?\\%c:", 'A'+drive); hDevice = CreateFile(szBuf, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL); if (hDevice != INVALID_HANDLE_VALUE) { pDevDesc = (PSTORAGE_DEVICE_DESCRIPTOR)new BYTE[sizeof(STORAGE_DEVICE_DESCRIPTOR) + 512 - 1]; pDevDesc->Size = sizeof(STORAGE_DEVICE_DESCRIPTOR) + 512 - 1; if(GetDisksProperty(hDevice, pDevDesc)) { szMoveDiskName[k] = chFirstDriveFromMask(temp); szMoveDiskName[0]=k; k++; /**************/ PHIDP_PREPARSED_DATA PreparsedData; HidD_GetPreparsedData(hDevice,&PreparsedData); HidD_FreePreparsedData(PreparsedData); /**************/ ShowMessage("\r\n找到U盘,名称:\r\n"); p= (char*)pDevDesc; str = (pDevDesc->VendorIdOffset ? &p[pDevDesc->VendorIdOffset]:"(NULL)"); ShowMessage(str); ShowMessage("\r\n产品ID:\r\n"); str=(pDevDesc->ProductIdOffset ? &p[pDevDesc->ProductIdOffset]:"(NULL)"); ShowMessage(str); ShowMessage("\r\n产品版本:\r\n"); str = (pDevDesc->ProductRevisionOffset ? &p[pDevDesc->ProductRevisionOffset] : "(NULL)"); ShowMessage(str); ShowMessage("\r\n序列号:\r\n"); str = (pDevDesc->SerialNumberOffset ? &p[pDevDesc->SerialNumberOffset] : "(NULL)"); ShowMessage(str); } delete pDevDesc; CloseHandle(hDevice); } } } } str.Format("\r\n U盘符:\r\n%s",&szMoveDiskName[1]); if(szMoveDiskName[0]==0) { str="\r\n没有U盘\r\n"; m_showMessage.Empty(); } ShowMessage(str);} 看看USB协议 usb 通讯分4种。如命令控制通道、批传输,其他忘了。然后usb设备类型又有好多种,如存储设备(U盘)、交互设备(键盘鼠标)、usb打印机、其他自定义等每种设备又有自己的协议规范。总之,你看了usb协议之后,会对你帮助很大的。我是3年前做过,没做完。所以也说不太清楚。大致是个意思。 vc6内存位图绘制图形怎么设置背景透明? 编译通过,link出错 祝F4生日快乐 CWinXPButtonST的使用问题... 关于CArray类型的参数 如何用程序实现数字图标的生成 谁告诉我计算色阶的算法?资料也行. 界面 先排序后查询的问题 在下拉列表框按Delete键删除一个项!写一些什么代码?????(基于对话框) 工资到5位数了,发贴庆祝! VC对话框程序加入CWebBrowser2控件,判断返回状态问题
int k = 0;
DWORD MaxDriveSet, CurDriveSet;
DWORD drive, drivetype;
TCHAR szBuf[300];
HANDLE hDevice;
PSTORAGE_DEVICE_DESCRIPTOR pDevDesc; char* p; CString str;
for(k=0; k<26; k++)
szMoveDiskName[k] = '\0';
k = 1;
MaxDriveSet = CurDriveSet = 0; MaxDriveSet = GetLogicalDrives();
CurDriveSet = MaxDriveSet;
for ( drive = 0; drive < 32; ++drive )
{
if ( MaxDriveSet & (1 << drive) )
{
DWORD temp = 1<<drive;
_stprintf( szDrvName, _T("%c:\\"), 'A'+drive );
if(GetDriveType( szDrvName )== DRIVE_REMOVABLE)
{
drivetype = DRVREMOVE; sprintf(szBuf, "\\\\?\\%c:", 'A'+drive);
hDevice = CreateFile(szBuf, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL); if (hDevice != INVALID_HANDLE_VALUE)
{ pDevDesc = (PSTORAGE_DEVICE_DESCRIPTOR)new BYTE[sizeof(STORAGE_DEVICE_DESCRIPTOR) + 512 - 1]; pDevDesc->Size = sizeof(STORAGE_DEVICE_DESCRIPTOR) + 512 - 1; if(GetDisksProperty(hDevice, pDevDesc))
{
szMoveDiskName[k] = chFirstDriveFromMask(temp);
szMoveDiskName[0]=k;
k++;
/**************/
PHIDP_PREPARSED_DATA PreparsedData;
HidD_GetPreparsedData(hDevice,&PreparsedData);
HidD_FreePreparsedData(PreparsedData);
/**************/
ShowMessage("\r\n找到U盘,名称:\r\n");
p= (char*)pDevDesc;
str = (pDevDesc->VendorIdOffset ? &p[pDevDesc->VendorIdOffset]:"(NULL)");
ShowMessage(str); ShowMessage("\r\n产品ID:\r\n");
str=(pDevDesc->ProductIdOffset ? &p[pDevDesc->ProductIdOffset]:"(NULL)");
ShowMessage(str);
ShowMessage("\r\n产品版本:\r\n");
str = (pDevDesc->ProductRevisionOffset ? &p[pDevDesc->ProductRevisionOffset] : "(NULL)");
ShowMessage(str);
ShowMessage("\r\n序列号:\r\n");
str = (pDevDesc->SerialNumberOffset ? &p[pDevDesc->SerialNumberOffset] : "(NULL)");
ShowMessage(str);
}
delete pDevDesc;
CloseHandle(hDevice);
}
}
} }
str.Format("\r\n U盘符:\r\n%s",&szMoveDiskName[1]); if(szMoveDiskName[0]==0)
{
str="\r\n没有U盘\r\n";
m_showMessage.Empty();
}
ShowMessage(str);
}
usb 通讯分4种。如命令控制通道、批传输,其他忘了。
然后usb设备类型又有好多种,如存储设备(U盘)、交互设备(键盘鼠标)、usb打印机、其他自定义等每种设备又有自己的协议规范。总之,你看了usb协议之后,会对你帮助很大的。
我是3年前做过,没做完。所以也说不太清楚。大致是个意思。