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

标签 java javafx-2 jna javafx-8 hwnd

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

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

有人知道有什么方法可以为 Stage 获取 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;
    }
}

关于java - 如何在 JavaFX 中获取舞台的窗口句柄 (hWnd)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15034407/

相关文章:

JavaFX primaryStage 删除 windows 边框?

java - 获取由 JNA 中的参数返回的不透明结构

java - 从java中的c++/c#程序读取共享内存

java - 使用Java获取Windows系统温度

java - 无法使用泰语解码 utf-8?

java - 如何用java解析javascript链接?

java - 处理模型中条件字段的最佳方法

Java注解

onchange - JavaFX 2 在 FXML 中定义 onChange 监听器

java - fxml TableView 中的错误