Win32APIの呼び出し
SWTを使ってJavaからWin32APIを実行し、一番手前のウインドウのタイトルを取得します。
注意:使用しているクラスはJavaDoc等では非公開になっています。今後変更されたり、サポートされなくなったりする可能性があります。
準備
サンプル
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へのアクセス サンプル