用Java获取当前活动窗口的标题

11 java user-interface active-window

我正在尝试编写一个Java程序来记录我每5秒使用一次的应用程序(这是一个时间跟踪器应用程序).我需要一些方法来找出当前活动窗口是什么.我找到了KeyboardFocusManager.getGlobalActiveWindow(),但我无法让它正常工作.最好是跨平台解决方案,但如果不存在,那么我正在使用X.Org开发Linux.谢谢.

Mat*_*ips 7

我很确定你会发现没有办法在纯Java中枚举活动窗口(之前我看起来很难),所以你需要为你想要定位的平台编写代码.

  • 在Mac OS X上,您可以使用"osascript" 启动AppleScript.

  • 在X11上,您可以使用xwininfo.

  • 在Windows上,您可以启动一些VBScript(例如,此链接看起来很有希望).

如果您正在使用SWT,您可能能够在SWT库中找到一些未记录的非公共方法,因为SWT为许多OS API提供了包装(例如,Cocoa上的SWT具有org.eclipse.swt.internal.cocoa.OS#objc_msgSend()可用于访问的方法) OS).Windows和X11上的等效"OS"类可能包含您可以使用的API.


Kev*_*oyd 2

要在 java swing 应用程序中查找活动窗口(无论是框架还是对话框),您可以使用以下递归方法:

Window getSelectedWindow(Window[] windows) {
    Window result = null;
    for (int i = 0; i < windows.length; i++) {
        Window window = windows[i];
        if (window.isActive()) {
            result = window;
        } else {
            Window[] ownedWindows = window.getOwnedWindows();
            if (ownedWindows != null) {
                result = getSelectedWindow(ownedWindows);
            }
        }
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

这是来自这里有关 窗口状态的更多线索。

  • 不过,这只考虑了 Java 窗口,而我认为 Steven 想要获得全局活动窗口,无论它是否是 Java 程序。 (2认同)
  • 大卫是对的,我想知道全局活动窗口的名称。这样我就可以自动跟踪我何时使用(例如)Firefox 以及何时使用(例如)Eclipse。 (2认同)