在Java Swing中如何获得Win32窗口句柄(hwnd)对窗口的引用?

在Java 1.4中,你可以使用((SunToolkit)Toolkit.getDefaultToolkit())。getNativeWindowHandleFromComponent()但是被删除。

看来你必须使用JNI来做到这一点。你有JNI代码和示例Java代码吗?

我需要这个来调用Win32 GetWindowLong和SetWindowLong API调用,这可以通过Jawin库来完成。

我想要一个非常精确的东西,所以我可以传递一个引用JDialog或JFrame并获取窗口句柄。

Swing transparency using JNI可能相关。

最佳答案
你没有写任何C / JNI代码。从Java:

import sun.awt.windows.WComponentPeer;

public static long getHWnd(Frame f) {
   return f.getPeer() != null ? ((WComponentPeer) f.getPeer()).getHWnd() : 0;
}

注意事项:

>这使用太阳。*包。显然这不是公共API。但它不可能改变(我认为不太可能打破上述解决方案)。
>这将只在Windows上编译和运行。你需要把它变成反射代码,这是便携的。

转载注明原文:在Java Swing中如何获得Win32窗口句柄(hwnd)对窗口的引用? - 代码日志