我们正在 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/