11 java user-interface active-window
我正在尝试编写一个Java程序来记录我每5秒使用一次的应用程序(这是一个时间跟踪器应用程序).我需要一些方法来找出当前活动窗口是什么.我找到了KeyboardFocusManager.getGlobalActiveWindow(),但我无法让它正常工作.最好是跨平台解决方案,但如果不存在,那么我正在使用X.Org开发Linux.谢谢.
我很确定你会发现没有办法在纯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.
要在 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)
归档时间: |
|
查看次数: |
19466 次 |
最近记录: |