2010-09-10 5 views
5

J'essaye de faire une fonction qui détecte si un périphérique USB est connecté étant donné les périphériques pid et vid. J'espère que ça ressemblerait à ça, je ne suis pas sûr de savoir comment faire ça en C#.Périphérique USB connecté

public bool IsUsbDeviceConnected(string pid, string vid) 
{ 
    //Code here 
} 
+2

S'il vous plaît modifier votre question; En ajoutant les points suivants, vous obtiendrez de meilleures réponses: 1. Qu'avez-vous essayé jusqu'à présent? 2. Quels résultats avez-vous obtenus? 3. En quoi cela diffère-t-il des résultats que vous attendiez? – Piskvor

Répondre

5
//using System.Management 
public bool IsUsbDeviceConnected(string pid, string vid) 
{ 
    using (var searcher = 
    new ManagementObjectSearcher(@"Select * From Win32_USBControllerDevice")) 
    { 
    using (var collection = searcher.Get()) 
    { 
     foreach (var device in collection) 
     { 
     var usbDevice = Convert.ToString(device); 

     if (usbDevice.Contains(pid) && usbDevice.Contains(vid)) 
      return true; 
     } 
    } 
    } 
    return false; 
} 
+0

Pouvez-vous s'il vous plaît m'aider avec [cette] (http://stackoverflow.com/q/7314257/75500) question connexe? – Shimmy

3

peut-être quelque chose comme

//import the System.Management namespace at the top in your "using" statement. Then in a method, or on a button click: 

ManagementObjectCollection collection; 
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'")) 
    collection = searcher.Get(); 
foreach (ManagementObject currentObject in collection) 
{ 
    ManagementObject theSerialNumberObjectQuery = new ManagementObject("Win32_PhysicalMedia.Tag='" + currentObject["DeviceID"] + "'"); 
    MessageBox.Show(theSerialNumberObjectQuery["SerialNumber"].ToString()); 
} 
collection.Dispose(); 

utilisant WMI

+0

Je n'ai pas de numéro de série, seulement l'identifiant du fournisseur et l'identifiant du produit qui est imbriqué quelque part dans le port USB. Aussi cet appel WMI recherche Win32_DiskDrives, pas tous les périphériques USB. – Robert

Questions connexes