2

在发现和/或设置我的应用程序所在的桌面/工作区方面是否有任何进展(当然是在 Linux/Solaris 下)?

4

2 回答 2

1

在现代窗口管理器上发现/设置桌面是通过_NET_WM_DESKTOP从 EWMH 规范中读取/设置属性来完成的(http://packages.debian.org/search?keywords=proftpd-basic&searchon=names&suite=all§ion=all

我不知道任何暴露此功能的整齐封装的 API,但谷歌出现了http://code.google.com/p/ewm/source/browse/trinity/fusion-X11/trunk/src/main/java /org/fusion/x11/ewmh/NetFrameExtents.java这可能是一个开始。

于 2011-09-03T23:24:21.590 回答
0

我是由“NetFrmeExtents.java”链接的项目的作者

这是我的答案:

如果不是不可能的话,在纯 Java 中很难做到,除非 swing/awt 现在已经实现了它。最直接(也是唯一?)的方法是使用 JNI 并通过 xlib/xcb 来完成。但是可以按照您的要求去做。

有一个名为 EWMH 的桌面约定可以帮助您实现所需的内容。您需要执行的基本步骤顺序是:

  1. 获取应用程序的窗口 ID。为此,Google 如何在 awt 中检索窗口句柄/窗口 ID。
  2. 接下来,您需要阅读由原子定义的几个“属性”。如果你不知道这是什么,谷歌如何从 xlib/xcb 中的窗口读取属性。
  3. 在 EWMH 中有一个属性列出了由窗口管理器定义的所有虚拟桌面。请参阅http://standards.freedesktop.org/wm-spec/wm-spec-1.3.html#id2449367
  4. 将属性设置为应用程序窗口上的属性,请参阅http://standards.freedesktop.org/wm-spec/wm-spec-1.3.html#id2507080到您希望应用程序所在的虚拟桌面的编号。

如果您已正确完成所有操作并且窗口管理器支持 ewmh(大多数都支持),它应该可以工作。

于 2011-10-01T20:39:13.257 回答