Window.getWindows();
没有得到所有打开的窗口,只是Java的。 有没有办法让所有的操作系统打开的窗口。 我正在做一个Java任务栏。
没有使用核心Java的解决方案,但问题可以使用JNI解决,或者为了更容易的时间,JNA。 正如评论中指出的那样,我不知道哪个解决方案是独立于平台的。
例如,这个演示程序使用JNA在Windows平台中枚举所有带标题的Windows,但也包括不是顶级窗口的窗口,甚至是不可见的窗口:
import java.util.ArrayList; import java.util.List; import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.win32.StdCallLibrary; public class EnumAllWindowNames { static interface User32 extends StdCallLibrary { User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class); interface WNDENUMPROC extends StdCallCallback { boolean callback(Pointer hWnd, Pointer arg); } boolean EnumWindows(WNDENUMPROC lpEnumFunc, Pointer userData); int GetWindowTextA(Pointer hWnd, byte[] lpString, int nMaxCount); Pointer GetWindow(Pointer hWnd, int uCmd); } public static List<String> getAllWindowNames() { final List<String> windowNames = new ArrayList<String>(); final User32 user32 = User32.INSTANCE; user32 .EnumWindows(new User32.WNDENUMPROC() { @Override public boolean callback(Pointer hWnd, Pointer arg) { byte[] windowText = new byte[512]; user32.GetWindowTextA(hWnd, windowText, 512); String wText = Native.toString(windowText).trim(); if (!wText.isEmpty()) { windowNames.add(wText); } return true; } }, null); return windowNames; } public static void main(String[] args) { List<String> winNameList = getAllWindowNames(); for (String winName : winNameList) { System.out.println(winName); } } }