java中x 的程序_如何在Java中获取程序窗口的x和y?

要获得“任何其他无关应用程序”的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的构建路径中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值