Comment puis-je trouver un numéro de port COM d'un périphérique bluetooth dans c #?
Mon entreprise a développé un appareil qui communique avec un PC via Bluetooth à l'aide d'un port COM virtuel.
Maintenant nous avons besoin d'un utilisateur pour jumeler un appareil avec un PC (MS Windows) d'abord, puis entrez le numéro de port com manuellement dans notre application(je parie que 95% des utilisateurs ne respectent pas cette taks).
Donc je voudrais que mon application à présenter à un utilisateur avec une liste des appareils bluetooth appariés (une liste de leurs "noms") et d'après ce que j'aimerais trouver le selecded de l'appareil numéro de port COM automatiquement.
Comment puis-je le faire en c#? (une solution indépendante de bluetooth installé la pile est appréciée).
Merci d'avance.
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Voir ma réponse à Widcomm bluetooth : comment ouvrir le port COM virtuel pour ma compréhension de la licence: l'utilisation de la version binaire est gratuit pour un usage commercial. Et aussi que je suis responsable de la bibliothèque.
Cependant, vous voudrez peut-être une solution à votre tâche en cours pour le moment. 🙂 Donc, utiliser WMI pour trouver le courant ports COM en place et voir si l'une d'entre eux sont pour votre appareil. Par exemple, dans PowerShell:
Dans ce gros long de la chaîne, on voit l'adresse de l'appareil cible: 00803A686519. On peut utiliser WMI à partir .NET, exécuter cette requête, filtre à ceux avec "BTHENUM", et ensuite d'analyser l'adresse.
Si vous avez besoin de créer un nouveau Bluetooth port COM virtuel, utilisez 32feet.NET's BluetoothDeviceInfo.SetServiceState(BluetoothService.SerialPort) de l'API. Voir le "Bluetooth Serial Ports" dans le Guide de l'Utilisateur, par exemple à http://www.alanjmcf.me.uk/comms/bluetooth/32feet.NET%20--%20User%20Guide.htmlet la documentation de classe dans le communiqué.
Malheureusement l'API Win32 natif nous appel ne permet pas de savoir quel est le nom du port COM, il a créé! 🙁 Donc exécuter la requête WMI avant et après l'appel pour voir ce nouveau nom est apparu (ou de l'utilisation du Système.IO.Les Ports.SerialPort.GetPortNames comme sa plus simple).
C'est tout spécifique à la pile Bluetooth de Microsoft. Je n'ai pas étudié la façon dont les autres piles se comportent à cet égard. Après une brève vérification Widcomm ports série apparaissent dans SerialPort.GetPortNames mais pas dans la requête WMI...
Tout d'abord, créez un Objet de Gestion moteur de Recherche pour rechercher dans la base de données WMI:
Prochaine, l'utilisation de LINQ pour obtenir tous les ports série dans une requête:
Vous pouvez maintenant imprimer tous les ports COM, leurs noms conviviaux et vous pouvez même filtrer à travers leurs PNPDeviceID pour trouver l'adresse de périphérique bluetooth. Voici un exemple:
J'ai réussi à obtenir le nom de bluetooth et le port COM en jouant la clé de registre
Le pseudo-code pour obtenir le bluetooth informations ci-dessous:
SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Devices
Le code est ci-dessous, il suffit d'appeler le GetBluetoothPort(), elle renvoie la liste des appareils bluetooth, et vous pouvez vous connecter en passant le numéro de port COM pour la classe SerialPort
C'est peut-être pas ce que vous cherchez, et peut-être que vous avez déjà trouvé votre réponse...
Je viens de trouver une question qui n'est pas exactement comme la vôtre, mais il a travaillé pour moi.. Avec celui-ci vous pouvez trouver lequel de vos Ports COM sont à partir d'un périphérique Bluetooth:
StackOverflow - Déterminer si le port série est normal COM ou SPP
J'espère qu'elle vous aide en quelque sorte. Si vous trouvez comment faire ce que tu voulais, s'il vous plaît laissez-moi savoir. Merci.
Donc, pour obtenir les informations sur un périphérique distant, y compris son nom, à l'aide de 32feet.NET faire:
Si vous n'utilisez pas la bibliothèque, vous aurez pour P/Invoke Win32 l'BluetoothGetDeviceInfo.