2009-04-19 113 views
5

我正在編寫一個SWT應用程序,它需要坐在系統托盤中並在用戶連接某個USB設備時自動彈出(應用程序用作其控制面板)。SWT:獲取系統設備更改通知(USB設備連接/斷開)

在本地環境(在這種情況下,win32,但我最終應該是平臺無關的)執行此操作的方法是監聽WM_DEVICECHANGE事件,然後檢查我的設備是否已斷開連接。

使用Google搜索這個主題,似乎SWT實際上並沒有處理這種類型的事件。有沒有人有任何想法如何實現這一目標?我的備用解決方案將採樣的USB端口每n秒,找設備,但是這是一個沒有沒有解決就我而言......

感謝和歡呼聲

+0

一個jUSB端口窗口要清楚,你在談論的標準部件工具包在Java中,對不對?如果是這樣,請添加一個「Java」標籤。或者你的意思是其他一些SWT? – Jegschemesch 2009-04-19 16:39:39

+0

沒錯。這對我來說是很自然的,我完全忘了添加最基本的:) – 2009-04-20 06:31:06

+0

最後,我已經解決了一個活躍的監聽器,每n毫秒輪詢一次USB驅動程序DLL。 – 2009-04-23 06:56:01

回答

0

Java不提供與設備和USB的直接交互。有幾個Java第三方庫提供USB相關功能(從USB端口讀取/寫入)。例如:http://www.icaste.com/(商業)

+0

我不需要USB連接 - 我正在使用與JNA連接的設備提供的DLL進行此操作。我需要聽OS OS WM_DEVICE_CHANGED消息。 – 2009-04-22 14:34:03

1

編輯:J-16 SDiZ報道,API存在於Windows太

這是一個非常好的文章約Access USB devices from Java applications

所描述的jUSB模塊包含一個USBListener目的。

由想要監視USB結構的對象實現的接口。報告這些變化的順序不一定是在現實世界中看到這些變化的順序,並且延遲也會發生。

特殊照顧SWT對象可以實現這個監聽器和做一些事情,當方法

deviceAdded(Device dev) 

被激發

+0

據我所知,jUSB不支持win32,這是該應用程序應該支持的主要平臺。 – 2009-04-22 14:34:47

0

您的Zorglub意見建議,你有一些(大概)JNI/JNA代碼來調用您提到的第三方DLL。我假設你也可以寫一個JNI包裝器到Windows API,你可以在這裏註冊以獲得所提到的_WM_DEVICECHANGE_事件的通知。