JavaFXで作ったウィンドウのHWNDを取得する
Windowsではウィンドウハンドルさえあれば大抵のことができてしまう。
からほぼ転載(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() ); } }