如何使用C/java检测活动应用程序?

Mar*_*tin 5 c java linux x11 operating-system

我想记录活动应用程序并保存活动应用程序的历史记录.我说活动应用程序,因为如果我运行一个应用程序并且它被最小化等,我不会将它视为活动应用程序.为了使我的问题更清楚,让我们来看看这个例子.我打开Firefox并在网上冲浪20分钟.然后我打开一个文本编辑器并开始写5分钟(Firefox正在运行,但我不使用它,因此Firefox不应被视为活动应用程序).所以我应该能够记录以下信息:

Firefox -> 20 minutes 
Text editor -> 5 minutes
Run Code Online (Sandbox Code Playgroud)

我希望在操作系统(首选Linux)期间跟踪每个使用过的应用程序,并创建一个开源应用程序,说明您使用每个应用程序的数量.

更新:我要记录的应用程序是用户在显示器上看到并正在使用的应用程序.例如,你可以改变窗口大小,你可以看到Firefox和文本编辑器(在不同的工作空间,级联等),但是你在文本编辑器中键入,因此,文本编辑器是积极的应用.换句话说,如果您正在与应用程序进行交互,或者是您正在查看的最后一个交互式应用程序,以PDF格式,文本等方式阅读某些内容,则应用程序处于活动状态.与应用程序交互:我的意思是单击,键入,滚动等.

NARROWING:我唯一不知道的是如何在这些条件下获得活动应用程序.我认为,如果我在当前工作区中的显示器上获得可以解决问题的最好的应用程序,那么我们有一个属性设置为窗口(总是在顶部),可能需要在没有启用此属性的情况下获取.我发现这个问题可能有助于回答.

使用Fedora 26,

提前致谢.

pau*_*sm4 2

  1. 应用程序是否“最小化”不是Linux进程的属性。相反,它由“桌面管理器:软件(例如 Gnome)”管理,而“桌面管理器”又位于 X Windows 之上。

  2. 换句话说,要查找哪些应用程序被“最小化”,哪些没有,您通常必须查询 X Windows。例如:

如何通过Linux中的终端检查窗口是否最小化

if xwininfo -all -id $windowIdGoHere |grep "Hidden"; then
  echo "is hidden"
fi
Run Code Online (Sandbox Code Playgroud)
  1. 如果“xwininfo”适合您...那么您当然可以从 Java 调用它,例如使用Process p = Runtime.getRuntime().exec(...).

  • 再次强调:从操作系统的角度来看,您的应用程序“始终运行”。无论是“最小化”(我从您最初的描述中想到)还是只是“不在焦点”......都是您的桌面窗口管理器的属性。其中,对于Linux,我们通常使用X Windows 来实现。因此,对于 Linux,“X windows”可能是您想要查找的地方。“xwininfo”是一个很好的起点。'希望有帮助。 (2认同)