У меня есть последовательное устройство, подключенное через Bluetooth. Он хорошо отображается на COM4. Я могу общаться с ним без проблем.
Я хочу упростить поиск пользователя (в идеале, я автоматически его обнаружу), поэтому я хочу найти его по имени. В списке "Устройства и принтеры" я получаю действительное имя, которое идеально. Однако я не могу найти эту ценность программно. Я пробовал массу вещей, используя класс "ManagementObjectSearcher", включая перечисление всех свойств и системных свойств, но никакие значения не соответствуют имени, отображаемому в "Устройствах и принтерах".
Если я смотрю в списке "Диспетчер устройств", он просто показывает "Стандартная последовательная связь по каналу Bluetooth (COM4)", что явно не полезно для ее идентификации.
Итак, как я могу получить отображаемое имя в списке "Устройства и принтеры"?
Итак, я нашел решение. Я схватил библиотеку от этих ребят:
Используя эту библиотеку, добавили эти две строки:
BluetoothClient client = new BluetoothClient();
BluetoothDeviceInfo[] devices = client.DiscoverDevices();
Это дало мне устройство "DeviceName" (имя, которое я получил после) и "DeviceAddress" (кусок идентификатора устройства, в основном).
Затем я запросил систему с помощью "ManagementObjectSearcher", которая предоставила мне список COM-портов и идентификаторов устройств (пространство имен System.Management).
ConnectionOptions options = ProcessConnection.ProcessConnectionOptions();
ManagementScope connectionScope = ProcessConnection.ConnectionScope(Environment.MachineName, options, @"\root\CIMV2");
ObjectQuery objectQuery = new ObjectQuery("SELECT * FROM Win32_PnPEntity");
ManagementObjectSearcher comPortSearcher = new ManagementObjectSearcher(connectionScope, objectQuery);
...etc as I looped over the results, pulled out the COM ports, and so on
Я сопоставил идентификаторы устройств из значений "ManagementObject" обратно в список "устройства", объединил результаты и получил то, что имело имя, идентификатор устройства, флаг, указывающий, является ли это устройством Bluetooth, и "человеком" читаемое "имя от устройства Bluetooth, если оно существует.
Болезненный, но он работает достаточно хорошо. Он медленный (client.DiscoverDevices() занимает некоторое время), но это выживаемо в моем случае.
это то, что вы ищете?