6
votes

Obtenez simplement les noms des périphériques USB attachés à un système?

n'êtes pas là-bas des appels système ou des fonctions spécifiques au système d'exploitation qui peuvent être appelées par Java pour obtenir uniquement les noms des périphériques USB ci-joints?

J'ai probablement vu 6-7 questions ici seulement, mais tout le monde mentionne les fonctions C ++ GetrawinPutDeviceList () etc, et ils ne sont pas conformes à la plate-forme croisée. Soit pour Windows en C # ou C ++ ou pour Linux uniquement.

Mais je travaille à Java. En outre, cela doit être une plate-forme transversale. Au moins, il doit fonctionner pour Windows, Linux et Mac. Je peux travailler avec des commandes Terminal / Shell / Command-Invompte également. Je suppose que je peux les courir avec Java.

J'ai essayé getfilesystemview et listrots . Mais ils donnent des noms de tous les lecteurs [DVD, partitions du disque dur, disquette, etc.

Je dois obtenir uniquement des périphériques USB.

S'il vous plaît ne mentionnez pas JUSB ou JSR080. Pourquoi:

JUSB: Accès aux périphériques USB exige actuellement qu'elles soient connectées à un hôte GNU / Linux système

javax.usb: La mise en œuvre de Windows pré-alpha n'est pas certifiée et nécessite un noyau conducteur.

USB4JAVA: essentiellement, il implémente JSR80 avec peu plus d'abstraction, peut-être

Bien que d'être honnête, je n'ai pas essayé libusb car il est en C ++.

Si vous allez mentionner les API, mentionnez-la complètement testée et essayé, qui fonctionnent à travers Linux, Windows et Mac. Si ce n'était pas le cas, je n'aurais pas posé cette question. J'ai vu la mention de JUSB, Javax.USB, etc. sur de nombreux autres messages.


3 commentaires

Cela convient-il ibm.com/developerworks/library/j-usb/index .html ?


L'avez-vous essayé vous-même? Plate-forme inter-plate-forme jamais? Si vous êtes pressant si fort, diable je vais l'essayer d'aujourd'hui alors.


Pour clarifier une chose: Javax.USB (JSR80) n'est qu'une API standard (comme l'API de servlet qui est mise en œuvre par Tomcat). USB4JAVA n'a rien à voir avec la très vieille mise en œuvre de référence que vous avez mentionnée comme "la mise en œuvre pré-alpha Windows". USB4JAVA implémente simplement l'API Javax.USB et utilise libusb comme backend. Mais ce n'est pas intéressant pour vous de toute façon, car même sans Java, la bibliothèque libusb ne peut pas vous donner les noms de périphérique USB, car sous Windows, il a également besoin d'un pilote spécial pour tous les appareils que vous souhaitez communiquer.


3 Réponses :


4
votes

Vous pouvez utiliser le JUSB API , pour Linux.

ou vous pouvez lancer le terminal sous Linux à l'aide de la classe classe et exécutez LS -LA / Dev / Disk / BY-ID / USB - * et attrapez le stdout pour connaître les résultats.

Pour Windows, vous pouvez essayer ceci: Comment Pour trouver le chemin de mon clé USB avec PowerShell

EDIT:

pour Windows, un autre utilitaire utile est le devcon.exe .

Pour plus d'informations, cochez Ceci.

edit 2: Pour Mac, vous pouvez lancer le terminal à l'aide de la classe de la classe et d'exécuter system_profiler spusbdaType


3 commentaires

En d'autres termes, une solution pour le problème de l'OP est spécifique au système d'exploitation = \.


À partir de maintenant, cela le semble. En attente d'autres solutions qui pourraient être OS Agnostic.


Désolé, je ne peux pas travailler avec DevCon. Cela ne fonctionne pas avec Vista, ainsi que les versions antérieures telles que 2000 ou XP. En outre, cela nécessitera l'installation de DevCon sur le système client, en particulier pour Windows.



2
votes

YOY peut essayer Javahidapi . Je pense que le code C / C ++ et JNI. Support déclaré Linux, Mac et Windows. Je l'ai essayé avec Linux (OK), avec des fenêtres propres dans une boîte virtuelle (pas OK, insatisfaitLinkerror, je pense que certains MSVS Libs ont été manqués). Si vous le compilez de la source, cela devrait fonctionner, je crois.

Voici Exemple: p> xxx pré>

éditer La sortie ne montre qu'un seul périphérique USB branché, Genius Laser Mouse. P>

E:\testRSA\out\production\testRSA>java -cp ".;hidapi-1.1.jar" -Djava.library.pat
h="e:\testRSA\out\production\testRSA" Test
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.codeminders.hidap
i.HIDManager.init()V
        at com.codeminders.hidapi.HIDManager.init(Native Method)
        at com.codeminders.hidapi.HIDManager.<init>(HIDManager.java:53)
        at com.codeminders.hidapi.HIDManager.getInstance(HIDManager.java:121)
        at Test.main(Test.java:14)


1 commentaires

Pouvez-vous partager un instantané du résultat?



0
votes

Peut-être que les choses se sont améliorées depuis que vous avez posé cette question pour la première fois. J'ai récemment commencé à explorer USB4java sur le Mac, et il semble fonctionner. Il y a exemple de code disponible, à la fois pour l'API de bas niveau (Libusb) et l'API de haut niveau (Javax).

Pour répertorier tous les périphériques USB, regardez le exemples .

J'ai téléchargé toutes les bibliothèques directement à partir de USB4JAVA.org et des exemples de GitHub. Je n'ai pas réussi à faire fonctionner la construction de Maven, mais je pourrais importer les bibliothèques et les exemples d'éclipse et les exécuter tous.

Il y a le même code natif inclus dans USB4JAVA, mais la bibliothèque les enveloppe tout à fait magnifiquement et cache tous les détails désordonnés, extrayant et déployant le code natif à la demande.


1 commentaires

Dans mes propres explorations, j'ai trouvé que mon Mac ait automatiquement revendiqué l'appareil que j'essayais de communiquer avec. Heureusement, j'ai trouvé une solution ici . Fondamentalement, vous créez un «pilote factice» comme fichier de texte de texte, qui empêche OSX d'attribuer son propre pilote au démarrage.