2017-08-27 31 views
0

管理者権限のない設定で、「デバイスとプリンタ」メニューに表示されるデバイスの名前をクエリするにはどうすればよいですか?「デバイスとプリンタ」メニューに表示されるデバイス名のクエリ

それはそれは、単純な、どこでも、すべての情報が含まれていないとして、WMI/ManagementObjectSearcherは役に立たないので、私は最初、それはだろうと思って。デバイスのフレンドリ名ではありません(または見つけることができませんでしIM)

この情報が見つかった場所は、 "Computer \ HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Control \ DeviceMigration \ Devices \ USB \ VID_0403 & PID_6001 \ XXXX ** BusDeviceDesc **"のレジストリにあります。 Comportsはアクティブで、同じポートがそこにある場合、私はそれを私が探しているものと仮定しますが、ここでは、私が避けたいレジストリに掘り下げるために管理者privaledgesが必要です。

私は管理者なしで探しているUSBデバイスを識別する方法はありますが、FTDIのカスタムvid/pidを作成する必要はありません。これは明らかに簡単にできますが、趣味プロジェクトにとってかなりの費用です。

**私はそれがより明確にするために画像を追加することはできません私は現在、その後、情報を探して、私はに接続するデバイスを識別するために、結果のクロスチェックを行うが、それは管理者権限を必要とする方法である

RegistryKey key = Registry.LocalMachine; 
     key = key.OpenSubKey(@"SYSTEM\ControlSet001\Control\DeviceMigration\Devices\USB\VID_0403&PID_6001", true); 

ManagementObjectSearcher(@"SELECT * FROM Win32_PnPEntity where DeviceID Like ""USB%""")) 

。それが将来的に誰かを助けるかもしれないので、だから私は私が欲しいものを行うための方法を見つけたいくつかの研究の後、私はここにコードを投稿

答えて

0

。(FTDIのICを使用した場合は悲しいことに、この実装は唯一のに役立ちます)

class Program { 
    static void Main(string[] args) { 

     string DeviceActualName = "Fan Control"; 


     FTDI usbDev = new FTDI(); 
     UInt32 devCount = 0; 
     usbDev.GetNumberOfDevices(ref devCount); 
     FTDI.FT_DEVICE_INFO_NODE[] infoNode = new FTDI.FT_DEVICE_INFO_NODE[devCount]; 

     string SerialNumber = null; 
     usbDev.GetDeviceList(infoNode); 
     foreach(FTDI.FT_DEVICE_INFO_NODE node in infoNode) { 
      if(node != null && node.Description.Equals(DeviceActualName)) { 
       Console.WriteLine("Found: {0} // {1}", node.Description, node.SerialNumber); 
       SerialNumber = node.SerialNumber; 
      } 
     } 

     var usbDevices = GetUSBDevices(); 
     foreach(var usbDevice in usbDevices) { 
      if(usbDevice.Name != null) 
       if(usbDevice.Name.Contains("COM") && usbDevice.PnpDeviceID.Contains(SerialNumber)) { 
        Console.WriteLine("Match Found: {0} // {1}", usbDevice.Name, usbDevice.PnpDeviceID); 
        Console.WriteLine("ComPort: {0}", usbDevice.Name[(usbDevice.Name.IndexOf("COM") + 3)]); 
       } 
     } 

     Console.Read(); 
    } 

    static List<USBDeviceInfo> GetUSBDevices() { 
     List<USBDeviceInfo> devices = new List<USBDeviceInfo>(); 

     ManagementObjectCollection collection; 
     using(var searcher = new ManagementObjectSearcher(@"SELECT * FROM Win32_PnPEntity")) 
      collection = searcher.Get(); 

     foreach(var device in collection) { 
      devices.Add(new USBDeviceInfo(
      (string) device.GetPropertyValue("Name"), 
      (string) device.GetPropertyValue("PNPDeviceID") 
      )); 
     } 

     collection.Dispose(); 
     return devices; 
    } 
    class USBDeviceInfo { 
     public USBDeviceInfo(string Name, string pnpDeviceID) { 
      this.Name = Name; 
      this.PnpDeviceID = pnpDeviceID; 
     } 
     public string Name { get; private set; } 
     public string PnpDeviceID { get; private set; } 
    } 
} 
関連する問題