2013-03-12 11 views
10

Mam urządzenie szeregowe na USB i więcej niż jedno z nich może być podłączone do komputera. Muszę zapytać i pobrać listę portów COM, do których są podłączone urządzenia. W Windows Device Manager możesz uzyskać port COM + przyjazną nazwę urządzeń, które są podłączone w chwili obecnej. Ta lista jest dynamiczna.Jak uzyskać dostęp do informacji w Menedżerze urządzeń systemu Windows z poziomu Java?

Czytanie z rejestru did not work, ponieważ przechowywane informacje są nieaktualne i statyczne, a nie dynamiczne.

Devcon (z Microsoft) wyświetla listę portów, do których podłączone są urządzenia, ale nie może być używana w mojej aplikacji, ponieważ nie można jej ponownie dystrybuować.

Wszelkie pomysły, a najlepiej rozwiązanie?

+1

umieć czytać i pisać porty COM? Sprawdź tutaj: http://www.java-samples.com/showtutorial.php?tutorialid=11 (Korzysta z pakietów javax.comm). Potem możesz po prostu przejrzeć wszystkie porty i znaleźć te, których szukasz, prawda? – Sebastian

+0

@Sebastian Nie wiem, czy przeczytałeś dokładnie to pytanie. "... pobierz listę portów COM, do których są podłączone urządzenia." – likejiujitsu

+0

I dałem ci dobry obejście problemu – Sebastian

Odpowiedz

0

Szukam Java Native Access, ponieważ zapewnia dostęp do interfejsu API systemu Windows z czystego kodu Java - bez JNI do czynienia. Martwiłem się o licencję LGPL; czy może być zawarty w produkcie komercyjnym, ale z tego, co mówią niektóre posty w grupie, może być. Po wypróbowaniu go w ciągu kilku następnych tygodni opublikuję tutaj.

+0

czy udało ci się uzyskać współpracę z JNA? Czy pls może podzielić się twoimi doświadczeniami? Próbuję napisać program, który wykrywa dyski po wstawieniu (hot-swap) i zastanawiałem się, czy JNA może pomóc. tnx !! – Martijn

+0

Działa to dobrze na Windows https://www.digitalinferno.com/wiki/Wiki.jsp?page=JNAPrintDevices (nie wiem jeszcze o jakiej licencji) – ZiglioUK

1

Czy próbowałeś tego jUSB API lub This example?

Mam nadzieję, że to ci pomoże.

+0

Dzięki za linki. Poszedłem na stronę jusb. Wygląda na to, że abandonware - brak aktualizacji od 2001 roku. Drugie łącze dotyczy systemów plików, których nie ma. – likejiujitsu

+0

Wygląda na to, że nadal jesteś tym zainteresowany, więc spróbuję czegoś, co sam sobie dam, że dam Ci znać .. :) – Patriks

3

Musiałem rozwiązać podobny problem zaledwie kilka tygodni temu. Natknąłem się na Jawin-Project, który dostarczył wszystko, czego potrzebujesz do korzystania z zapytań WMI. Jest już dość stary, ale działa jak czar, jeśli postępujesz zgodnie z dokumentacją. Miłego przewodnika po niemiecku można znaleźć codegods blog.

Dla mnie to nie rozwiązało wszystkich problemów (miałem kilka bardzo konkretnych rzeczy, aby dowiedzieć się o urządzeniu docelowym), w końcu utworzyłem własną klasę i DLL w C z wbudowanym interfejsem API systemu Windows.

Mam nadzieję, że właśnie tego szukałeś.

+0

dzięki. z której części interfejsu API systemu Windows korzystałeś, aby uzyskać informacje o połączonych urządzeniach? – likejiujitsu

+0

JNA wydaje się, że będzie łatwiej, ale jest LGPL https://github.com/twall/jna. Nie jestem pewien, czy można go zastosować w produkcie komercyjnym. – likejiujitsu

+0

W 2005 roku przyjrzałem się Jawinowi dla innego projektu, który był trudny do zastosowania - zakładał znajomość interfejsu API systemu Windows i interfejsów wewnętrznych. Trudno było uzyskać odpowiedź na listach dyskusyjnych i wydaje się, że porzucono. W końcu wykorzystałem NJawin, most Java-COM autorstwa Witalija Shelesta, który również wydaje się być porzucony. Jednak w przypadku tego projektu, 8 lat później, uważam, że muszą istnieć lepsze opcje. Dla mnie JNI wywołanie biblioteki DLL w C jest ostatecznością tylko wtedy, gdy lepsze opcje zawiodą. – likejiujitsu

Powiązane problemy