如何在JavaFX中获取舞台的窗口句柄(hWnd)?

我们正在Windows中构建JavaFX应用程序,我们希望能够做一些事情来操纵我们的应用程序在Windows 7/8任务栏中的显示方式.这需要修改名为“Application User Model ID”的Windows变量.

我们已经设法通过使用JNA完成了我们想要的Swing,我们想在JavaFX中重复我们的解决方案.不幸的是,要做到这一点,我们需要能够为我们的应用程序中的每个窗口检索hWnd(窗口句柄).这可以通过JNA Native.getWindowPointer()方法在Swing / AWT中完成,该方法适用于java.awt.Window,但我无法找到一个使用javafx.stage.Window执行此操作的好方法.

有没有人知道有什么方法可以获得hWnd舞台?

最佳答案
这是一个JavaFX2版本(使用Stage而不是Window):

private static Pointer getWindowPointer(Stage stage) {
    try {
        TKStage tkStage = stage.impl_getPeer();
        Method getPlatformWindow = tkStage.getClass().getDeclaredMethod("getPlatformWindow" );
        getPlatformWindow.setAccessible(true);
        Object platformWindow = getPlatformWindow.invoke(tkStage);
        Method getNativeHandle = platformWindow.getClass().getMethod( "getNativeHandle" );
        getNativeHandle.setAccessible(true);
        Object nativeHandle = getNativeHandle.invoke(platformWindow);
        return new Pointer((Long) nativeHandle);
    } catch (Throwable e) {
        System.err.println("Error getting Window Pointer");
        return null;
    }
}

转载注明原文:如何在JavaFX中获取舞台的窗口句柄(hWnd)? - 代码日志