Obtenir de l'appareil/conducteur des informations liées à un port COM?
J'ai une Série-vers-périphérique USB avec un nom similaire pilote de périphérique dans le gestionnaire de périphériques de Windows. Les dispositifs ne sont pas toujours prendre le même port COM sur le démarrage du système, de sorte que mon programme doit identifier sur démarrer.
J'ai essayé d'utiliser RXTX pour énumérer les ports COM sur le système, mais cela n'a pas fonctionné parce que CommPortIdentifier.getName()
retourne simplement le nom COM (eg. COM1, COM2,...) J'ai besoin d'acquérir le fabricant de pilote de nom, ou le nom du pilote tel qu'il apparaît dans le gestionnaire de périphériques, et l'associer avec le nom COM.
Cela peut facilement être fait en Java? (Je serais intéressé par un 3ème partie Java bibliothèques qui prennent en charge ce.) Sinon, comment j'ai pu commencer à réaliser ce via l'API win32?
Vous devez vous connecter pour publier un commentaire.
J'ai obtenu ce que je voulais en utilisant le
WinRegistry
classe fournie par David dans cette SORTE de question pour obtenir le FriendlyName à partir de la clé de registre associée avec mon périphérique USB. J'ai ensuite analyser le numéro de port COM à partir du nom convivial.Certaines choses à considérer:
Les périphériques USB sont situés à
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\
dans le registre (testé sur WinXP, Win7.)Je le dispositif VID + PID pour trouver la bonne clé de périphérique (par exemple.
VID_xxxx&PID_xxxx
.) Depuis VID et PID sont spécifiques aux périphériques, cette clé doit être fiable à travers de multiples systèmes.La
VID_xxxx&PID_xxxx
clé contient une autre sous-clé avec dispositif de valeurs. J'ai eu quelques difficultés énumérer les sous-clés avecWinRegistry
, j'ai donc codé en dur le sous-nom de la clé comme un rapide hack au cours du développement. Une façon beaucoup plus sûre solution serait de rechercher des sous-clés pour trouver le bon nom.Les touches de l'appareil existe pas dans le registre, indépendamment de savoir si l'appareil est actuellement connecté. Ce code fait l'hypothèse que Windows update FriendlyName si l'appareil est raccordé à un port COM différent. Je n'ai pas vérifié cela, mais les choses ont l'air bien lors de l'utilisation de tests.
Exemple
Code
getFriendlyName()
méthode que j'ai refait degetComNumber()
. Malheureusement, le nom convivial n'est pas toujours que amicale.@robjb Votre code ne permettent pas plus d'un appareil à connecter. Comment l'utilisateur de connaître le nom de l'appareil? J'ai ajouté à votre code donc pour retourner la liste des ports com:
Mise à jour: je ne pense pas que ce sont des solutions. Pourquoi? Cette information est statiquement stockées dans le registre - même lorsque l'appareil n'est pas connecté.
Grand exemple, en utilisant la JNA, ici.
L'auteur (Geir Arne Ruud) a publié sous Licence du Domaine.
Mon exemple de code