繁星淼淼
要获得“任何其他无关应用程序”的x和y位置,您将不得不查询操作系统,这意味着可能使用JNI,JNA或其他一些脚本实用程序,如AutoIt(如果是Windows)。我建议使用JNA或脚本实用程序,因为它们比JNI(我的经验有限)更容易使用,但要使用它们,您需要下载一些代码并将其与Java应用程序集成。编辑1 我不是JNA专家,但是我确实把它搞砸了,这就是我得到一些命名窗口的窗口坐标:import java.util.Arrays;import com.sun.jna.*;import com.sun.jna.platform.win32.WinDef.HWND;import com.sun.jna.win32.*;public class GetWindowRect { public interface User32 extends StdCallLibrary { User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class, W32APIOptions.DEFAULT_OPTIONS); HWND FindWindow(String lpClassName, String lpWindowName); int GetWindowRect(HWND handle, int[] rect); } public static int[] getRect(String windowName) throws WindowNotFoundException, GetWindowRectException { HWND hwnd = User32.INSTANCE.FindWindow(null, windowName); if (hwnd == null) { throw new WindowNotFoundException("", windowName); } int[] rect = {0, 0, 0, 0}; int result = User32.INSTANCE.GetWindowRect(hwnd, rect); if (result == 0) { throw new GetWindowRectException(windowName); } return rect; } @SuppressWarnings("serial") public static class WindowNotFoundException extends Exception { public WindowNotFoundException(String className, String windowName) { super(String.format("Window null for className: %s; windowName: %s", className, windowName)); } } @SuppressWarnings("serial") public static class GetWindowRectException extends Exception { public GetWindowRectException(String windowName) { super("Window Rect not found for " + windowName); } } public static void main(String[] args) { String windowName = "Document - WordPad"; int[] rect; try { rect = GetWindowRect.getRect(windowName); System.out.printf("The corner locations for the window \"%s\" are %s", windowName, Arrays.toString(rect)); } catch (GetWindowRect.WindowNotFoundException e) { e.printStackTrace(); } catch (GetWindowRect.GetWindowRectException e) { e.printStackTrace(); } }}当然,为了实现这一点,需要下载JNA库并将其放在Java类路径或IDE的构建路径中。