См. Мой ответ на Widcomm bluetooth: как открыть виртуальный COM для моего понимания лицензии: использование бинарной версии бесплатно для коммерческого использования. А также, что я поддерживаю библиотеку.
Итак, небольшое небольшое отступление. Я не большой поклонник виртуальных COM-портов. Кажется, всегда гораздо проще использовать прямое соединение через сокеты, чем пытаться настроить COM-порт, и попытаться найти имя, под которым оно было создано (см. Ниже!), А затем открыть SerialPort, чтобы использовать его, а затем, если соединение потеряно, никто не знает, и ему просто приходится повторять попытки ... С библиотекой гораздо проще просто создать и использовать это прямое соединение Bluetooth!
Однако вы можете захотеть решить текущую задачу на данный момент. :-) Итак, используйте WMI, чтобы найти текущие COM-порты на месте и посмотреть, есть ли какие-либо из них для вашего устройства. Например, в PowerShell:
C:\> Get-WmiObject -query "select DeviceID,PNPDeviceID from Win32_SerialPort"
...
...
DeviceID : COM66
PNPDeviceID : BTHENUM\{00001101-0000-1000-8000-00805F9B34FB}\7&1D80ECD3&0&00803A686519_C00000003
В этой большой длинной строке виден адрес целевого устройства: 00803A686519. Можно использовать WMI из .NET, выполнить этот запрос, отфильтровать запросы с помощью «BTHENUM», а затем проанализировать адрес.
Если вам необходимо создать новый виртуальный COM-порт Bluetooth, используйте API-интерфейс BluetoothDeviceInfo.SetServiceState (BluetoothService.SerialPort) от 32feet.NET. См. Раздел «Последовательные порты Bluetooth» в Руководстве пользователя, например, в http://www.alanjmcf.me.uk/comms/bluetooth/32feet.NET%20--%20User%20Guide.html, и документации класса в выпуске.
К сожалению, родной Win32 API, который мы вызываем, не говорит, какое имя COM-порта он создал! :-( Так что запустите запрос WMI до и после вызова, чтобы увидеть, какое новое имя появилось (или используйте System.IO.Ports.SerialPort.GetPortNames как его более простое).
Это все относится к стеку Microsoft Bluetooth. Я не исследовал, как ведут себя другие стеки в этом отношении. После краткой проверки последовательные порты Widcomm появляются в SerialPort.GetPortNames, но не в запросе WMI ...