关于获取u盘,移动硬盘设备信息的问题

1、hid设备和u盘设备读取方式是否一样。

 2、读取u盘和移动硬盘序列号具体方法和步骤。

void CTestUSBDlg::ShowUdisk(){ 

int k = 0; 

DWORD   MaxDriveSet, CurDriveSet; DWORD   drive, drivetype; TCHAR   szBuf[300]; HANDLE   hDevice; PSTORAGE_DEVICE_DESCRIPTOR pDevDesc;   char * p;   CString str;  AfxMessageBox("adword"); 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++;        ShowMessage("/r/n找到U盘,厂家ID:/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厂家ID:/r/n");        str = (pDevDesc->VendorIdOffset ? &p[pDevDesc->VendorIdOffset] : "(NULL)");        ShowMessage(str);        ShowMessage("/r/n序列号:/r/n");        str = (pDevDesc->SerialNumberOffset ?  &p[pDevDesc->SerialNumberOffset] : "(NULL)" );        ShowMessage(str);         ShowMessage("/r/n设备类型:/r/n");        str = (pDevDesc->DeviceType ?  &p[pDevDesc->DeviceType] : "(NULL)" );        ShowMessage(str);         ShowMessage("/r/n是否可移动:/r/n");        str = (pDevDesc->RemovableMedia ?  &p[pDevDesc->RemovableMedia] : "(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);}

获得的序列号为空。

不知用什么方法可以获得序列号。

获取U盘ID序列号 VS2005编译通过,源码源自CSDN。已经测试好用。 可以获得U盘名称,制造商ID号 版本号 U盘序列号及容量 Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; using System.Management; namespace UDiskTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button2_Click(object sender, EventArgs e) { DriveInfo[] s = DriveInfo.GetDrives(); foreach (DriveInfo drive in s) { if (drive.DriveType == DriveType.Removable) { pf.Text = drive.Name.ToString(); break; } } ManagementClass cimobject = new ManagementClass("Win32_DiskDrive"); ManagementObjectCollection moc = cimobject.GetInstances(); foreach (ManagementObject mo in moc) { if (mo.Properties["InterfaceType"].Value.ToString() == "USB") { try { //产品名称 Caption.Text = mo.Properties["Caption"].Value.ToString(); //总容量 Size.Text = mo.Properties["Size"].Value.ToString(); string[] info = mo.Properties["PNPDeviceID"].Value.ToString().Split('&'); string[] xx = info[3].Split('\\'); //序列号 MessageBox.Show("U盘序列号:" + xx[1]); PNPDeviceID.Text = xx[1]; xx = xx[0].Split('_'); //版本号 REV.Text = xx[1]; //制造商ID xx = info[1].Split('_'); VID.Text = xx[1]; } catch (Exception ex) { MessageBox.Show(ex.Message); } } } } } } 如果编译遇到问题是using System.Management;无法找到引用找到, 项目(p)->添加引用(R)->找到.NET标签页 列表中下部位找到System.Management 双击点确定
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值