我们正在Windows中构建JavaFX应用程序,我们希望能够做一些事情来操纵我们的应用程序在Windows
7/8任务栏中的显示方式。这需要修改Windows变量,称为“ 应用程序用户模型ID ”。
我们已经通过使用JNA设法完全完成了我们在Swing中想要的工作,并且我们想在JavaFX中重复我们的解决方案。不幸的是,要做到这一点,我们需要能够为hWnd
应用程序中的每个窗口检索(窗口句柄)。这可以通过JNA
Native.getWindowPointer()方法在Swing
/ AWT中完成,该方法可以使用java.awt.Window
,但我不知道使用来实现此目的的好方法javafx.stage.Window
。
有没有什么办法任何人都知道做GET hWnd
的Stage
?
这是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中有一个舞台。我没有按X关闭按钮来关闭窗口,而是隐藏窗口,或者说切换到计算机上的其他应用程序。无论何时我隐藏窗口或切换到PC的任何其他窗口,我都希望舞台自动关闭。 我尝试了这三种方法,但所有这些方法仅在我自己关闭窗口时激活,而不是在我隐藏窗口时激活。 任何帮助将不胜感激。谢谢。
问题内容: 在Java 1.4中,您可以使用(((SunToolkit)Toolkit.getDefaultToolkit())。getNativeWindowHandleFromComponent(),但这已被删除。 看来您现在必须使用JNI来执行此操作。您是否有JNI代码和示例Java代码来执行此操作? 我需要它来调用Win32 GetWindowLong和SetWindowLong API调
使用Inspect.exe我可以看到应用程序组件的树结构中存在一个按钮,但我找不到获取该按钮句柄的方法。这是控件的Inspect.exe输出: 这个按钮的特殊之处在于它没有hwnd值。(hwnd: 0x0)。这是我试图获得对该按钮的引用的内容: 在本例中,hwnd变量是包含按钮的应用程序主窗口的句柄。 在阅读FindWindowEx的留档时,看起来似乎有多种方法可以使用不同的参数,我觉得我已经尝试
问题内容: 我已经为两个窗口/阶段编写了一个控制器。在MainClass中打开第一个窗口。如果用户单击按钮,则控制器中的第二个按钮。如何在applyFor()方法中从second.fxml获取TextFields? 谢谢。 问题答案: 在fxml之间共享控制器不是很好,除非它们具有相同的用途。在这里,这两个fxml似乎有不同的用途(帐户管理,登录或其中一个类似,并为另一个创建新帐户)。更糟糕的是,
问题内容: 我是JNA的新手。我试图获取所有窗口的句柄,包括最小化的窗口。我需要所有的窗户。我遇到了Windows问题:如何获取所有可见窗口的列表?这帮助我获得了Windows列表,但是它的类型为int。我不能与要求type的函数一起使用。那么,有什么方法可以获取类型而不是int指针的所有窗口句柄?最后,为什么和?它如何接受两者?我有点困惑。谢谢。 我有以下代码(从Hovercreft的答案中编辑
问题内容: 我正在尝试在JPanel中嵌入HWND(窗口句柄)。 实际上,我可以将HWND嵌入到JFrame中,但是嵌入式窗口始终位于其他组件的顶部,因此无法移动它。如果尝试删除我的JFrame的所有子组件,则HWND将保留在那里。HWND似乎是在JFrame顶部绘制的,而不是其中之一。 要将HWND嵌入到JPanel中,我通过jna使用User32: 我用它来获取我的JFrame的HWND: 有