2009-04-19 4 views
5

Ich schreibe eine SWT-Anwendung, die in der Taskleiste sitzen und automatisch erscheint, wenn der Benutzer ein USB-Gerät verbindet (die Anwendung dient als sein Bedienfeld).SWT: Benachrichtigung über eine Systemgeräteänderung (USB-Gerät Verbindung/Trennung)

Der Weg, dies in der nativen Umgebung (Win32 in diesem Fall, aber ich sollte letztlich plattformunabhängig sein) ist das WM_DEVICECHANGE-Ereignis zu hören, dann überprüfen, ob mein Gerät getrennt wurde.

Googling das Thema, es scheint, wie SWT tatsächlich nicht diese Art von Ereignis behandelt. Hat jemand eine Idee, wie man das erreicht? Meine Ausweichlösung würde den USB-Port Abtasten alle n Sekunden, für das Gerät suchen, aber das ist ein no-no-Lösung so weit es mich betrifft ...

Dank und Jubel

Shai

+0

klar zu sein, Sie sprechen über das Standard Widget Toolkit in Java, nicht wahr? Wenn ja, fügen Sie bitte ein "Java" -Tag hinzu. Oder meinst du eine andere SWT? – Jegschemesch

+0

rechts. Es war so natürlich für mich, dass ich völlig vergessen habe, das grundlegendste hinzuzufügen :) –

+0

Schließlich habe ich mich für einen aktiven Listener entschieden, der die USB-Treiber-DLL alle n Millisekunden abfragt. –

Antwort

0

Java bietet keine direkte Interaktion mit den Geräten und mit USB. Es gibt mehrere Bibliotheken von Drittanbietern für Java, die USB-bezogene Funktionen (Lesen/Schreiben von USB-Anschluss) bereitstellen. Zum Beispiel: http://www.icaste.com/ (Gewerbe)

+0

Ich brauche keine USB-Verbindung - ich mache das mit einer DLL, die mit dem Gerät geliefert wird, mit dem ich eine Verbindung zu JNA hergestellt habe. Ich muss auf die OS WM_DEVICE_CHANGED Nachricht hören. –

1

EDIT: J-16 SDiZ berichtet, dass die API für Windows existiert auch

Hier ist ein sehr guter Artikel ist über Access USB devices from Java applications

Das beschriebene JUSB Modul enthält eine USBListener Objekt.

Schnittstelle von Objekten implementiert, die USB-Struktur überwachen möchten. Die Reihenfolge, in der diese Änderungen gemeldet werden, ist nicht notwendigerweise die Reihenfolge, in der die Änderungen in der realen Welt zu sehen sind, und es treten auch Verzögerungen auf.

Youre SWt Objekt diesen Listener implementieren können und etwas tun, wenn die Methode

deviceAdded(Device dev) 

abgefeuert wird
+0

Soweit ich sehen kann, unterstützt jUSB nicht win32, was die primäre Plattform ist, die diese App unterstützen sollte. –

+0

Es tut mir leid, dein Recht. Es funktioniert nur für Linux. –

0

Ihr Kommentar für Zorglub schlägt vor, dass Sie einige (vermutlich) JNI/JNA haben Code, um die von Ihnen erwähnte 3rd Party DLL aufzurufen. Ich nehme an, dass Sie auch einen JNI-Wrapper in die Windows-API schreiben könnten, in dem Sie sich registrieren können, um für das von Ihnen erwähnte _WM_DEVICECHANGE_-Ereignis benachrichtigt zu werden.

+0

das wäre wohl das richtige zu tun, wenn für diese Entwicklung genügend Ressourcen zur Verfügung stehen. Leider ist das nicht der Fall ... Ich entschied mich schließlich für einen aktiven Zuhörer. –

Verwandte Themen