【问题标题】:How to programmatically determine process running x11 window in Java如何以编程方式确定在 Java 中运行 x11 窗口的进程
【发布时间】:2017-07-10 16:08:16
【问题描述】:

我知道这可能是不可能的,但如果是的话,任何帮助将不胜感激。

我试图在 java 中收集在 linux 中打开的每个可见 x11 窗口的大小、位置、窗口 ID、窗口标题和程序。虽然我可以使用 runProcess 以及 xprop、xwininfo 等来完成所有这些工作,但我更愿意在不使用外部程序的情况下这样做。

使用 JNA,我能够收集除程序名称之外的所有内容。是否有可能完全使用 Java 获得 PID,就像使用 xprop 一样?理想情况下,我希望能够获得与使用 xprop [id] _NET_WM_PID 获得的相同的一般信息。

【问题讨论】:

  • 你需要这个做什么?
  • 我想填充所有打开窗口的列表,并允许用户选择一个并在其上创建透明覆盖。

标签: java linux x11 jna


【解决方案1】:

使用GraphicsEnvironment

isHeadless() 表示没有 GUI。

对于连接的屏幕设备,这里也是起点。

现在可以使用 PID,无论是在 java 9 中还是在 Java 8 中。

【讨论】:

  • 我在这里看到了获取图形设备的方法,但除了能够在给定的图形设备上获取任何全屏窗口之外,我看不到任何获取窗口或 PID 的方法。我错过了什么吗?
  • GraphicsEnvironment 有一些我想提的好东西。 PID 是人们期待已久的对 Java 进程的补充,现在能够获得。我没有调查。也许可以挤进评论。顶层窗口也可以通过 java.awt 获取 (Window.getWindows())。
  • awt 的 getWindows 函数在这种情况下对我没有帮助。我正在尝试获取有关由 java 应用程序创建的所有 not 窗口的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-11
  • 1970-01-01
  • 2011-10-17
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多