c# - Wie kann ich eine COM-Port-Nummer eines Bluetooth-Geräts in c # herausfinden?




3 Answers

Siehe meine Antwort auf Widcomm bluetooth: Wie öffne ich die virtuelle COM für mein Verständnis der Lizenz: die Verwendung der binären Version ist frei für kommerzielle Nutzung. Und auch, dass ich die Bibliothek pflege.

Also ein kurzer kleiner Exkurs. Ich bin kein großer Fan von virtuellen COM-Ports. Es scheint immer einfacher zu sein, eine direkte "Sockets" -Verbindung zu verwenden, anstatt einen COM-Port einzurichten und zu versuchen, den Namen zu finden, unter dem er erstellt wurde (siehe unten!), Und dann einen SerialPort zu öffnen, um ihn zu benutzen. und dann, wenn die Verbindung verloren ist, weiß man es nicht und muss es einfach weiter versuchen ... Mit der Bibliothek ist es viel einfacher, diese direkte Bluetooth-Verbindung zu erstellen und zu verwenden!

Allerdings möchten Sie im Moment vielleicht eine Lösung für Ihre aktuelle Aufgabe. :-) Verwenden Sie also WMI, um die aktuellen COM-Anschlüsse zu finden und festzustellen, ob sie für Ihr Gerät geeignet sind. Zum Beispiel in 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

In diesem großen langen String sieht man die Adresse des Zielgerätes: 00803A686519. Man kann WMI von .NET verwenden, diese Abfrage ausführen, die mit "BTHENUM" filtern und dann die Adresse analysieren.

Wenn Sie einen neuen virtuellen Bluetooth-COM-Port erstellen müssen, verwenden Sie die BluetoothDeviceInfo.SetServiceState (BluetoothService.SerialPort) -API von 32feet.NET. Siehe den Abschnitt "Bluetooth Serial Ports" im Benutzerhandbuch, z. B. unter http://www.alanjmcf.me.uk/comms/bluetooth/32feet.NET%20--%20User%20Guide.html und die Klassendokumentation in der Freisetzung.

Leider teilt die native Win32-API, die wir aufrufen, nicht den Namen des COM-Ports, den sie erstellt hat! :-( Führen Sie die WMI-Abfrage vor und nach dem Aufruf aus, um zu sehen, welcher neue Name angezeigt wurde (oder verwenden Sie System.IO.Ports.SerialPort.GetPortNames als einfacher).

Das ist alles spezifisch für den Microsoft Bluetooth Stack. Ich habe nicht untersucht, wie sich andere Stapel in dieser Hinsicht verhalten. Nach einer kurzen Überprüfung erscheinen die seriellen Ports von Widcomm in SerialPort.GetPortNames, aber nicht in der WMI-Abfrage ...

Meine Firma hat ein Gerät entwickelt, das via Bluetooth über einen virtuellen COM-Port mit einem PC kommuniziert.

Jetzt brauchen wir einen Benutzer, der zuerst ein Gerät mit einem PC (MS Windows OS) koppelt und dann seine Com-Port-Nummer manuell in unsere Anwendung eingibt (ich wette, 95% der Benutzer werden bei dieser Aufgabe scheitern).

Daher möchte ich, dass meine Anwendung einem Benutzer eine Liste gekoppelter Bluetooth-Geräte (eine Liste ihrer "freundlichen Namen") präsentiert, und danach möchte ich die COM-Port-Nummer des ausgewählten Geräts automatisch herausfinden.

Wie kann ich es in c # tun? (eine Lösung unabhängig von installierten Bluetooth-Stack wird geschätzt).

Danke im Voraus.




Vielleicht ist es nicht das, wonach du suchst, und vielleicht hast du deine Antwort schon gefunden ...

Ich habe gerade eine Frage gefunden, die nicht genau wie Ihre ist, aber für mich funktioniert .. Mit dieser können Sie herausfinden, welche Ihrer COM-Ports von einem Bluetooth-Gerät stammen: - Bestimmen, ob die serielle Schnittstelle normal COM oder SPP ist

Ich hoffe es hilft irgendwie. Wenn Sie herausfinden, wie Sie tun können, was Sie wollten, lassen Sie es mich wissen. Vielen Dank.




Um die Informationen zu einem Remote-Gerät einschließlich seines Namens zu erhalten, verwenden Sie 32feet.NET:

BluetoothAddress addr = ... ...
BluetoothDeviceInfo info = new BluetoothDeviceInfo(addr);
string name = info.DeviceName;

Wenn Sie die Bibliothek nicht verwenden, müssen Sie Win32s BluetoothGetDeviceInfo aufrufen / aufrufen.




Related

c# serial-port bluetooth