fbpx

Java SWT Extension API 實作教學

Java SWT Introduction

全域事件的應用相當廣泛,例如HotKey與即時功能的呼叫都常可以見到。由於Java Runtime對於底層系統的限制性,使得程式設者無法直接取得系統資源。而後來Eclipse發展的SWT則採用JNI的方式進行程式對系統資源的呼叫,理所當然也解除了原本Java先天上的許多限制。本文中簡介Java SWT Extension套件,只用者可以藉由這樣的開發方式取得OS所提供的硬體資訊與全域資源。

SWT Application

官方Example執行畫面

在圖中可以看到SWT Extension提供了許多功能,這些功能包括硬體資訊、系統登入檔、磁碟資訊與下面會介紹的Hook等等。

Java SWT

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。
在硬體資訊的取得上,能夠應用在產生硬體唯一的編號資訊,增加程式的保護與靈活性。

發佈留言