Connaitre le nom d'un port série

papachimique - 3 avril 2019 à 10:25
 papachimique - 6 avril 2019 à 12:30
Bonjour,
j'ai commencé un programme qui détecte les ports série branchés sur mon ordinateur avec l'api rxtx.
le programme me renvoi la liste des ports séries utilisés (dans mon cas COM5 et COM6)

j'aimerais savoir maintenant le nom de l'appareil branché à ces ports . le gestionnaire de périphérique m'indique le nom de ma cle bluetooth branchée (ici CSR8510 A10) . Je voudrais savoir comment récupérer ce nom dans mon programme.

D'après mes recherches il faut utilisé WinRegistry ... mais je n'ai pas vu de tuto qui m'explique comment je peux résoudre mon problème.

Question bonus : ma cle bluetooth utilise deux ports (je suppose pour l'entréé et la sortie) comment savoir lequel correspond a l'entrée et celui qui correspond à la sortie.

Merci d'avance
PS : étant novice et un niveau d'anglais de 6ième , si je pouvais avoir une réponse clair sans me diriger vers des sites en anglais cela m'aiderais.

7 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
4 avril 2019 à 13:43
Salut,

A moins que tu maîtrise bien les périphériques Bluetooth (et surtout la spec), je te déconseille plus que fortement de te taper la connexion avec une clé Bluetooth sans passer par une API.

Pour ta question, oui c'est bien un COM pour les messages en provenance du Bluetooth et un pour les messages vers le device.
Et de ce que j'en comprend sous Windows l'information que tu veux se trouve dans [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\BTHENUM\....] et si tu veux accéder à la base de registre depuis un code java il faut soit passer par JNI (nécessite des compétences en dev C/C++), soit passer par JNA (du code natif en pure java), ou encore exécuter un script registre pour lire l'information que tu veux.

Apres, je ne connais pas assez cet OS pour t'en dire plus.

0
bonjour,

merci à Twinuts.
Comme proposé dans ta réponse j'ai téléchargé l'api registry pour accéder à la base de registre (fichier registry.jar) en passant par JNI.

quand je tape le code :

public static void main(String[] args)
{
RegistryKey key = Registry.openSubkey(Registry.HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Enum\\USB", RegistryKey.ACCESS_READ);
}


la console me renvoi une erreur me disant que le programme ne trouve pas ICE_JNIRegistry.DLL
ERROR You have not installed the DLL named 'ICE_JNIRegistry.DLL'.

le problème c'est que je ne sais pas ou se trouve cette dll (elle n'était pas dans le fichier que j'ai telechargé) et je ne sais pas non plus ou je la mettrais.

merci d'avance.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
Modifié le 6 avril 2019 à 01:18
Salut,

Sans la ddl tu ne peux rien faire...
Plutôt que d'utiliser une solution JNI, oriente toi plus vers une des solutions proposées sur le lien ICI qui restent en java pure.
Il y a des solutions avec JNA, des solutions avec la réflexion en Java et d'autres avec l'utilisation de la classe Process (regarde également les commentaires).

/!\ Il y a de grandes chances que pour la manipulation de la base de registre, tu sois obligé de lancer ton application avec les droits d'administrateur.


0
bonjour,

re merci pour la réponse de Twninuts. J'étais déjà tombé sur ce site, mais j'ai un reflexe : quand je vois une page en anglais , je ferme les yeux et je ferme la dite fenêtre (ça limite les ressources quand on veut apprendre à programmer !! ) .

Je vais faire une exception à la règle ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bonjour,

j'ai copié le programme cité dans la dernière réponse de Twninuts (qui m'a l'air assez simple d'utilisation) ... mais je rencontre trois problèmes (autrement c'est pas marant!):

1) quand je compile le programme j'ai un message d'erreur :
WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.

2) je recherche des informations sur mes ports com5 et com6 , j'imagine qu'il faut donc recherche dans le repertoire HKEY_LOVAL_MACHINE/SYSTEM/CurrentControlSet/Enum/USB . cependant dans ce répertoire, plutôt qu'avoir des sous répertoires du style "com5", "com6" je tombe sur des répertoires ayant des noms très parlant comme VID_0000&PID_0002 du coup je ne sais pas dans quel répertoire rechercher !!

3) même si je savais dans quel répertoire rechercher, le programme cité ci-dessus sous entendant que l'on connaisse déjà la variable recherchée .... or je ne sais pas quelle valeur rechercher pour avoir le nom du périphérique et savoir si c'est un port entré ou sortie.

Bref plein de problèmes .
merci d'avance.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
6 avril 2019 à 12:15
Salut,

1 - Cela fonctionne quand même ?
2 - HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\BTHENUM ne fonctionne pas ? Si tu commences à remonter jusqu'à l'énumération USB... tu n'as pas fini...
3 - Pourquoi tu t'obstines et tu n'utilises pas une API java BLE ?
0
bonjour,
Oui ça fonctionne. j'ai ,en suivant l'exemple demandé :
HKEY_LOCAL_MACHINE, //HKEY
"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", //Key
"ProductName"

et il me repond :Windows Distribution = Windows 10 Home

moi je cherche le nom de mon périphérique (dans mon cas une cle usb)
j'arriva a voir les port connecté SYSTEM/Currentcontrolset/control/com Name Arbiter qui me répond que les port 3,4,5,6 sont connecté , mais je n'arrive pas à trouver l'information sur les port 5 et 6 !!
rem : sur mon ordi je n'ai pas Enum/bthEnum
moi , je voudrais dans un premier temps savoir ou chercher les informations pour un port donnée !!
malgrè plein de recherche (j'y suis depuis ce matin) je n'arriva pas à trouver sur windows 10 ou se trouve ses informations (plein de sites m'indiques des chemins que je n'ai pas ! )
0
Rejoignez-nous