检测应用程序是否未使用

时间:2009-01-02 14:34:03

标签: delphi

如何在DELPHI中检测应用程序的使用时间是否超过x分钟

6 个答案:

答案 0 :(得分:4)

如果您编写Windows应用程序,请查看GetLastInputInfo函数。

答案 1 :(得分:3)

以下是一些使用应用程序查找鼠标和键盘活动的代码

答案 2 :(得分:1)

使用应用程序OnDeactivate和onActive事件.. 这样,如果用户再次激活您的程序,您可以中止长跑工作。

例如:

 Application.OnDeactivate = yourDeactivProcedure;

procedure mainform.YourDecativateProcedure (sender : tObject);
begin
 // do your job.. 
end;

要处理激活事件以中止你要么必须以睡眠方式做坏事,要么在睡眠检查后如果设置了全局可变性。 或者,您可以拥有一个可以完成loongrunning工作的相关对象。 我会说的要好得多。你可以将loongrunningjobs优先级设置为低,它不会影响你的程序,

答案 3 :(得分:1)

使用Application.OnIdle事件:

编写OnIdle事件处理程序,以便在应用程序空闲时执行特殊处理。应用程序在不处理代码时处于空闲状态。例如,应用程序在等待用户输入时处于空闲状态。

OnIdle仅被调用一次,因为应用程序转换为空闲状态。除非Done设置为false,否则不会连续调用它。将Done设置为false的应用程序会占用过多的CPU时间,从而影响整体系统性能。

在此事件中使用@aku建议的计时器或GetLastInputInfo来确定您是否可以在不中断用户的情况下开始维护

答案 4 :(得分:0)

取决于您如何定义“已使用” - 如果您正在监控自己,您可以通过在用户交互发生时记录它来查看您最后一次响应用户交互(鼠标移动/按键/触发菜单事件/等等。)。监控另一个应用程序很棘手,因为定义它“正在使用”会更难。

答案 5 :(得分:0)

这实际上取决于应用程序及其功能。虽然用户可能无法在新输入的意义上与其进行交互,但他们当然可能正在查看可见的客户区。

此外 - 您没有说明是否要检测应用内部或应用外部。

简单方法

  • 查看它是否具有当前焦点。
  • 检查窗口是否可见

其他很多人,但他们依赖于应用程序本身。

您必须定义“使用”的含义。这可能意味着不同的事情,并且会对您如何确定它是否符合您的标准做出重大改变。