我想记录活动应用程序并保存活动应用程序的历史记录。我说活动应用程序,因为如果我运行一个应用程序,它被最小化,等我不会把它算作一个活跃的应用程序。 为了使我的问题更清楚,让我们来看看这个例子。 我打开Firefox并在网上冲浪20分钟。然后我打开一个文本编辑器并开始写5分钟(Firefox正在运行,但我不使用它,因此Firefox不应被视为活动应用程序)。所以我应该能够记录以下信息:
Firefox -> 20 minutes
Text editor -> 5 minutes
我希望在操作系统(首选Linux)期间跟踪每个使用过的应用程序,并创建一个开源应用程序,说明您使用每个应用程序的数量。
更新:我要记录的应用程序是用户在显示器上看到并正在使用的应用程序。例如,你可以改变窗口大小,你可以看到Firefox和文本编辑器(在不同的工作空间,级联等),但你在文本编辑器中键入,因此,文本编辑器是积极的应用。换句话说,如果您正在与应用程序进行交互,或者是您正在查看的最后一个交互式应用程序,以PDF格式,文本等方式阅读某些内容,则应用程序处于活动状态。与应用程序交互:我的意思是单击,键入,滚动等。< / p>
NARROWING:我唯一不知道的是如何使用这些条件获取活动应用程序。我认为,如果我在当前工作区中的显示器上获得最难以解决问题的应用程序,那么我们有一个属性设置为一个窗口(总是在顶部),可能需要在没有启用此属性的情况下获取。我发现this question可能有助于回答。
使用Fedora 26,
提前致谢。
答案 0 :(得分:2)
是否应用程序最小化&#34;是 NOT Linux进程的属性。相反,它由您的桌面管理员管理:软件(例如Gnome),后者又位于X Windows之上。
换句话说,找出最小化的应用程序&#34;哪些不是,你通常要查询X Windows。例如:
How can you check if a window is minimized via the terminal in linux
if xwininfo -all -id $windowIdGoHere |grep "Hidden"; then echo "is hidden" fi
Process p = Runtime.getRuntime().exec(...)
。答案 1 :(得分:2)
感谢贡献者,我找到了解决方案来完成我的要求。我发现this github项目在C中做了类似的工作,然后在java中实现了一个解决方案(我更喜欢它,因为maven和JavaFX)。
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;
public class Main {
private static final DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
public static void main(String[] args) throws IOException, InterruptedException {
System.out.println("Start :");
while(true) {
Date date = new Date();
Process proc = Runtime.getRuntime().exec("xdotool getactivewindow getwindowname");
java.io.InputStream is = proc.getInputStream();
java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
String val = "";
if (s.hasNext()) {
val = s.next();
}
else {
val = "";
}
System.out.print(val +" " + "at:");
System.out.println(sdf.format(date));
TimeUnit.SECONDS.sleep(10);
}
}
}
每10秒返回一次活动窗口名称,并打印正在使用的应用程序的标题:
Start :
ApplineBuilder - NetBeans IDE 8.2
at:2017/10/12 02:58:58
ApplineBuilder - NetBeans IDE 8.2
at:2017/10/12 02:59:08
GoldenDict
at:2017/10/12 02:59:18
at:2017/10/12 02:59:28
How to detect the active application using C/java? - Stack Overflow - Mozilla Firefox
at:2017/10/12 02:59:38
ApplineBuilder - NetBeans IDE 8.2
at:2017/10/12 02:59:48
Cancel Running Task
at:2017/10/12 02:59:58