Get headers of non-Java windows in Java

Window.getWindows(); 

Does not get all open windows, only java. Is there any way to get all windows opened by the operating system. I am creating a java taskbar.

+7
source share
1 answer

There is no solution using the Java kernel, but the problem can be solved using JNI or, for an easier time, JNA. As noted in the comments, no solution (which I know) will be platform independent.

For example, this demo program uses JNA to list all Windows with a title on the Windows platform, but will also include windows that are not top-level windows or even visible 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); } } } 
+20
source

All Articles