スポンサーリンク

JavaFX+JNA ウィンドウハンドルを取得する

JavaFXで作ったウィンドウのHWNDを取得する

Windowsではウィンドウハンドルさえあれば大抵のことができてしまう。

http://stackoverflow.com/questions/15034407/how-can-i-get-the-window-handle-hwnd-for-a-stage-in-javafx

からほぼ転載(getWindowPointer)。

getWindowPointerで取得したウィンドウハンドルをHWND型の変数に代入し、

SetWindowTextAでウィンドウのタイトルを変えている。

 

package fxdemo;

import javafx.application.Application;
import javafx.stage.Stage;

import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.WinDef.HWND;

import com.sun.jna.Native;
import com.sun.jna.win32.StdCallLibrary;

import java.lang.reflect.Method;

public class JavaApp extends Application{
    public static void main(String[] args){
        Application.launch(JavaApp.class, args);
    }

    public interface User32 extends StdCallLibrary {
        User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class);
        int MessageBoxA(HWND hwnd, byte[] text, byte[] caption, int type);
        int MessageBoxA(HWND hwnd, String text, String caption, int type);
    	boolean SetWindowTextA(HWND hwnd, byte[] text);
    	boolean SetWindowTextA(HWND hwnd, String text);
    }

	private static Pointer getWindowPointer( javafx.stage.Window window ) {
	   Pointer retval = null;
	   try {
	      Method m = window.getClass().getMethod("impl_getPeer");
	      final Object tkStage = m.invoke( window );
	      m = tkStage.getClass().getDeclaredMethod("getPlatformWindow" );
	      m.setAccessible( true );
	      final Object platformWindow = m.invoke( tkStage );
	      m = platformWindow.getClass().getMethod( "getNativeHandle" );
	      retval = new Pointer( (Long)m.invoke( platformWindow ) );
	   } catch (Throwable t) {
	      System.err.println("Error getting Window Pointer");
	   }
	   return retval;
	}

    @Override
    public void start(Stage stage) {
        stage.setTitle("Hello");
        stage.show();

        HWND hwnd = new HWND( getWindowPointer(stage) );
        User32 user32 = User32.INSTANCE;
        user32.SetWindowTextA( hwnd , "こんにちは◎★♪".getBytes() );

    }
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: