Получите USB-письмо от DeviceNotifyEventArgs - PullRequest
1 голос
/ 01 апреля 2019

Я не могу найти, как извлечь вставленное письмо USB.

У меня есть событие, которое прослушивает вставленный USB, но мне нужно вставить письмо, потому что у меня есть несколько USB-портов.

void OnDeviceNotifyEvent(object sender, DeviceNotifyEventArgs e)
{
  MessageBox.Show(e.ToString());
}

Отпечатки:

[DeviceType: DeviceInterface] [EventType: DeviceArrival] Полное имя: USB # VID_2CE3 & PID_6487 # 0000000000000000 # {a5dcbf10-6530-11d2-901f-00edCEid0: 0id0: 0x0fb95: 950x6487 SerialNumber: 0000000000000000 ClassGuid: a5dcbf10-6530-11d2-901f-00c04fb951ed

Я использую LibUsbDotNet.DeviceNotify dll

E:\ Например:вставлено

1 Ответ

0 голосов
/ 02 апреля 2019

Поскольку DeviceNotifyEventArgs содержит серийный номер, вы можете использовать его для поиска буквы устройства с помощью WMI.

Вот адаптированная версия этого ответа :

// enumerate usb drives
foreach (var drive in new ManagementObjectSearcher("select * from Win32_DiskDrive where InterfaceType='USB'").Get())
    // find driver with known serial number
    if ((string)drive.Properties["SerialNumber"].Value == serialNumber)
        // associate partitions with drive
        foreach (var partition in new ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" + drive["DeviceID"] + "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition").Get())
            // associate logical disk with partition
            foreach (var disk in new ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" + partition["DeviceID"] + "'} WHERE AssocClass = Win32_LogicalDiskToPartition").Get())
                Console.WriteLine("Disk=" + disk["Name"]);

Обязательно заверните все в using: все поисковики и коллекции, возвращенные Get(), должны быть уничтожены.

...