Java SWT Introduction
全域事件的應用相當廣泛,例如HotKey與即時功能的呼叫都常可以見到。由於Java Runtime對於底層系統的限制性,使得程式設者無法直接取得系統資源。而後來Eclipse發展的SWT則採用JNI的方式進行程式對系統資源的呼叫,理所當然也解除了原本Java先天上的許多限制。本文中簡介Java SWT Extension套件,只用者可以藉由這樣的開發方式取得OS所提供的硬體資訊與全域資源。
SWT Application
官方Example執行畫面
在圖中可以看到SWT Extension提供了許多功能,這些功能包括硬體資訊、系統登入檔、磁碟資訊與下面會介紹的Hook等等。
SWT Implementation
- Download
Eclipse套件更新
網址 : http://feeling.sourceforge.net/update/
Sourceforge Net 下載網頁
http://sourceforge.net/project/showfiles.php?group_id=182187
Win-32所需的DLL
http://org.eclipse.swt.win32.extension.1.0.4.zip
- Hot Key 熱鍵實作程式
import org.eclipse.swt.extension.hook.Hook; import org.eclipse.swt.extension.hook.data.HookData; import org.eclipse.swt.extension.hook.data.KeyboardHookData; import org.eclipse.swt.extension.hook.listener.HookEventListener; public class HotKey { public static void main(final String[] args) { Hook.KEYBOARD.addListener(new HookEventListener(){ @Override public void acceptHookData(HookData arg0) { KeyboardHookData KHD = ((KeyboardHookData)arg0); System.out.println(KHD.getWParam()+" - "+KHD.getTransitionState()); //Print code if( KHD.getScanCode() == 29 && KHD.getTransitionState()){ //按下Ctrl執行動作 System.out.println("Hotting"); } else if( KHD.getScanCode() == 1 ) { //按下[ESC]結束 System.exit(0); } } }); Hook.KEYBOARD.install(); //註冊事件 } }
- Hot Mouse 熱鼠實作程式 !?
import org.eclipse.swt.extension.hook.Hook; import org.eclipse.swt.extension.hook.data.HookData; import org.eclipse.swt.extension.hook.data.MouseHookData; import org.eclipse.swt.extension.hook.listener.HookEventListener; public class HotMouse { public static void main(String[] args) { Hook.MOUSE.addListener(new HookEventListener() { @Override public void acceptHookData(HookData hookData) { if (hookData != null) { System.out.println("Mouse Point X = " + ((MouseHookData)hookData).getPointX()); System.err.println("Mouse Point Y =" + ((MouseHookData)hookData).getPointY()); } if (hookData.getWParam() == 513) { // left button pressed } else if (hookData.getWParam() == 514) { // left button released } else if (hookData.getWParam() == 516) { // right button pressed } else if (hookData.getWParam() == 517) { // right button } else if (hookData.getWParam() == 519) { // middle button } else if (hookData.getWParam() == 520) { // middle button } } }); Hook.MOUSE.install(); } }
Conclusion
有了這樣的工具,未來便可以開發更生動的應用程式,但是由於Java SWT Extension是使用JNI的方式進行OS資源的取得,所以在跨平台上也要注意改用適合的Native Code。
在硬體資訊的取得上,能夠應用在產生硬體唯一的編號資訊,增加程式的保護與靈活性。