無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

Win32APIの呼び出し

SWTを使ってJavaからWin32APIを実行し、一番手前のウインドウのタイトルを取得します。
注意:使用しているクラスはJavaDoc等では非公開になっています。今後変更されたり、サポートされなくなったりする可能性があります。

準備

  1. SWT: The Standard Widget ToolkitよりWindowsSWTのアーカイブをダウンロード
  2. アーカイブを展開し、Javaのクラスパスに「swt.jar」を追加。
  3. DLLのロードパスに「swt-*.dll」を追加。(Java実行時のカレントディレクトリに配置し確認しました。Javaシステムプロパティ「java.library.path」でdllデイレクトリのパスを指定する方法もあるようです。)

サンプル

org.eclipse.swt.internal.win32.OS にAPIが用意されています。Win32 API 関数とほぼ同じラインナップなので、リファレンスはWin32 API 関数リストあたりを参照すると吉です。また、org.eclipse.swt.internal.win32パッケージ以下に、TCHARなどのラッパークラス?が多数定義されています。

import org.eclipse.swt.internal.win32.OS;
import org.eclipse.swt.internal.win32.TCHAR;

public class GetWindowText {
    public static void main( String[] args ) throws Exception {

        // ウインドウタイトルを挿入するバッファ。
        TCHAR buf = new TCHAR(OS.CP_INSTALLED, 1000);

        // 最前面のウインドウハンドルを得る。
        int hwnd = OS.GetForegroundWindow();

        // 最前面のウインドウのタイトルを取得。
        OS.GetWindowText( hwnd, buf, 1000 );
        // 最前面のウインドウのタイトルの長さを取得。
        int length = OS.GetWindowTextLength (hwnd);

        System.out.println(buf.toString( 0, length ));

    }
}

所感

  • ○JNI使わずにいろいろできる。javahとか使わなくて良い。
  • Javaの世界で書ける。Cがわかってなくても何とかなる(かもしれない)。Cコンパイラも不要。
  • △自作のDLLは不要だけど、SWTのDLLは必要。

Windowsレジストリにアクセスしないといけないとか、諸般の事情でWin32APIを使う羽目になった場合、一考の価値有りと思います。


参考:SWTonWindows
いがぴょんの日記ウェブページv2 - 2005/12/28 日記: SWTを用いた JavaからWin32APIへのアクセス サンプル