Java中如何获取程序窗口的x和y?
有没有办法让我在java中获取窗口的X和Y值?我读到我必须使用运行时,因为 java 不能直接混乱,但是我不太确定如何做到这一点。谁能给我一些关于如何获得这个的链接/提示?
Is there a way for me to get the X and Y values of a window in java? I read that I'll have to use runtime, since java can't mess directly, however I am not so sure of how to do this. Can anyone point me some links/tips on how to get this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
要获取“任何其他不相关应用程序”的 x 和 y 位置,您将必须查询操作系统,这意味着可能使用 JNI、JNA 或某些其他脚本实用程序,例如 AutoIt(如果是 Windows)。我推荐 JNA 或脚本实用程序,因为两者都比 JNI 更容易使用(根据我有限的经验),但要使用它们,您需要下载一些代码并将其与您的 Java 应用程序集成。
编辑1
我不是 JNA 专家,但我确实摆弄了一些,这就是我获取某些命名窗口的窗口坐标的方法:
当然,要使其工作,需要下载 JNA 库并将其放置在Java 类路径或 IDE 的构建路径中。
To get the x and y position of "any other unrelated application" you're going to have to query the OS and that means likely using either JNI, JNA or some other scripting utility such as AutoIt (if Windows). I recommend either JNA or the scripting utility since both are much easier to use than JNI (in my limited experience), but to use them you'll need to download some code and integrate it with your Java application.
EDIT 1
I'm no JNA expert, but I do fiddle around with it some, and this is what I got to get the window coordinates for some named window:
Of course for this to work, the JNA libraries would need to be downloaded and placed on the Java classpath or in your IDE's build path.
在最终用户的帮助下这很容易做到。只需让他们单击屏幕截图中的一个点即可。
EG
典型输出
This is easy to do with the help of the end user. Just get them to click on a point in a screen shot.
E.G.
Typical output
参加聚会有点晚了,但会添加这个以可能节省其他人的时间。如果您使用的是更新版本的 JNA,那么 WindowUtils.getAllWindows() 将使这更容易完成。
我正在使用来自以下 Maven 位置的截至本文的最新稳定版本:
JNA Platform - net.java.dev.jna:jna-platform:5.2.0
JNA Core - net.java.dev.jna:jna:5.2 .0
Java 8 Lambda (编辑:矩形是一个占位符,需要是最终的或有效最终的才能在 lambda 中工作)
其他 Java
然后在 JPanel 中您可以绘制捕获的图像适合(如果长宽比不同,将拉伸图像)。
A little late to the party here but will add this to potentially save others a little time. If you are using a more recent version of JNA then
WindowUtils.getAllWindows()
will make this much easier to accomplish.I am using the most recent stable versions as of this post from the following maven locations:
JNA Platform - net.java.dev.jna:jna-platform:5.2.0
JNA Core - net.java.dev.jna:jna:5.2.0
Java 8 Lambda (Edit: rect is a placeholder and will need to be final or effectively final to work in a lambda)
Other Java
Then within a JPanel you can draw a captured image to fit (Will stretch image if different aspect ratios).