[英]How to detect the active application using C/java?
我想记录活动应用程序并保存活动应用程序的历史记录。 我说活动应用程序,因为如果我运行一个应用程序,它被最小化,等我不会把它算作一个活跃的应用程序。 为了使我的问题更清楚,让我们来看看这个例子。 我打开Firefox并在网上冲浪20分钟。 然后我打开一个文本编辑器并开始写5分钟(Firefox正在运行,但我不使用它,因此Firefox不应被视为活动应用程序)。 所以我应该能够记录以下信息:
Firefox -> 20 minutes
Text editor -> 5 minutes
我希望在操作系统(首选Linux)期间跟踪每个使用过的应用程序,并创建一个开源应用程序,说明您使用每个应用程序的数量。
更新:我要记录的应用程序是用户在显示器上看到并正在使用的应用程序。 例如,你可以改变窗口大小,你可以看到Firefox和文本编辑器(在不同的工作空间,级联等),但你在文本编辑器中键入,因此,文本编辑器是积极的应用。 换句话说,如果您正在与应用程序进行交互,或者是您正在查看的最后一个交互式应用程序,以PDF格式,文本等方式阅读某些内容,则应用程序处于活动状态。与应用程序交互:我的意思是单击,键入,滚动等。
NARROWING:我唯一不知道的是如何在这些条件下获得活动应用程序。 我认为,如果我在当前工作区中的显示器上获得最难以解决问题的应用程序,那么我们有一个属性设置为一个窗口(总是在顶部),可能需要在没有启用此属性的情况下获取。 我发现这个问题可能有助于回答。
使用Fedora 26,
提前致谢。
应用程序是否“最小化” 不是 Linux进程的属性。 相反,它由您的“桌面管理器:软件(例如Gnome)管理,而软件又位于X Windows之上。
换句话说,要查找哪些应用程序“最小化”而哪些不是“最小化”,您通常必须查询X Windows。 例如:
if xwininfo -all -id $windowIdGoHere |grep "Hidden"; then echo "is hidden" fi
Process p = Runtime.getRuntime().exec(...)
。 感谢贡献者,我找到了解决方案来完成我的要求。 我发现这个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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.