none
如何判断指定的移动设备 RRS feed

  • 问题

  • 如题,在C#中当我在同一台PC机上插入多个移动设备(移动设备可以是U盘、移动硬盘)时我该怎样才能获取到我想要的那个移动设备呢?比如我在同一台PC上插入了A(U盘)、B(移动硬盘)、C(U盘);A是我想要得到的那个移动设备,我该怎么得到这个设备?知道的朋友们还请您能赐教,先多谢了!
    2012年9月8日 6:43

答案

  • 通过你进一步的描述,我想你应该是在找一个类似GUID的东西,那么你可以试试WMI : Win32_DiskDrive http://msdn.microsoft.com/en-us/library/windows/desktop/aa394132(v=vs.85).aspx

    你可以试试 Model 属性或者 SerialNumber 属性,但是请注意Windows Server 2003, Windows XP, Windows 2000, and Windows NT 4.0:  This property is not available.

    这样,如果你得到了同样的Model和SerialNumber,那么你可以认为这是同一个U盘。

    希望有用。

      

    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 StevinAngel 2012年9月11日 15:01
    2012年9月11日 1:32
    版主
  • 根据您给的提示我查了下使用如下方式可以解决问题。

    ManagementClass cimobject = new ManagementClass("Win32_DiskDrive"); ManagementObjectCollection moc = cimobject.GetInstances(); foreach (ManagementObject mo in moc) { if (mo.Properties["InterfaceType"].Value.ToString() == "USB") { string strName = mo.Properties["Caption"].Value.ToString();//USB设备的名称 string strSize = mo.Properties["Size"].Value.ToString(); //USB设备的容量

    string[] info = mo.Properties["PNPDeviceID"].Value.ToString().Split('&'); string[] xx = info[3].Split('\\'); string strUsbID = xx[1]; //USB的ID xx = xx[0].Split('_'); xx = info[1].Split('_'); string strCompany = xx[1]; //USB制造商 } } }

    通过上面这种方式可以获取到USB的信息,获取到的USB的ID就是一个唯一的表示。
    • 已标记为答案 StevinAngel 2012年9月11日 15:01
    2012年9月11日 15:00

全部回复

  • 你好

    当你插好后,应该可以通过盘符来选择你需要的移动设备 

    谢谢


    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2012年9月10日 9:33
    版主
  • 您好,非常感谢您的回复。可是同一个移动设备在不同的PC机上对应的盘符不可能相同的,还有在同一台PC机上多个移动设备插入的顺序不同对应的盘符也是不一定相同的。所以您提供的方法是不可行的。
    2012年9月10日 12:24
  • 通过你进一步的描述,我想你应该是在找一个类似GUID的东西,那么你可以试试WMI : Win32_DiskDrive http://msdn.microsoft.com/en-us/library/windows/desktop/aa394132(v=vs.85).aspx

    你可以试试 Model 属性或者 SerialNumber 属性,但是请注意Windows Server 2003, Windows XP, Windows 2000, and Windows NT 4.0:  This property is not available.

    这样,如果你得到了同样的Model和SerialNumber,那么你可以认为这是同一个U盘。

    希望有用。

      

    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 StevinAngel 2012年9月11日 15:01
    2012年9月11日 1:32
    版主
  • 多谢您的帮助,通过您给出的属性我试了下在Windows7可行。但是程序不可能都是运行在Windows7系统上的,所以还是没有解决我的问题,不过非常感谢您的帮助。
    2012年9月11日 12:04
  • 根据您给的提示我查了下使用如下方式可以解决问题。

    ManagementClass cimobject = new ManagementClass("Win32_DiskDrive"); ManagementObjectCollection moc = cimobject.GetInstances(); foreach (ManagementObject mo in moc) { if (mo.Properties["InterfaceType"].Value.ToString() == "USB") { string strName = mo.Properties["Caption"].Value.ToString();//USB设备的名称 string strSize = mo.Properties["Size"].Value.ToString(); //USB设备的容量

    string[] info = mo.Properties["PNPDeviceID"].Value.ToString().Split('&'); string[] xx = info[3].Split('\\'); string strUsbID = xx[1]; //USB的ID xx = xx[0].Split('_'); xx = info[1].Split('_'); string strCompany = xx[1]; //USB制造商 } } }

    通过上面这种方式可以获取到USB的信息,获取到的USB的ID就是一个唯一的表示。
    • 已标记为答案 StevinAngel 2012年9月11日 15:01
    2012年9月11日 15:00