2009-12-14 31 views
1

如何计算每个应用程序的总执行时间赢得(进程)与该组在一天中。进程计时

例如: 过程 - 的notepad.exe - 10分钟今日(总量)

回答

4

我会使用针对Win32_Process的WMI查询和检索CreationDate值根据MSDN其是日期(和时间)一个进程开始执行。

德尔福的一个很好的库可从Magenta Systems获得。这个库包含几个例子来帮助你开始。

这只会跟踪当前正在运行的进程。如果你想跟踪一次运行但不再运行的进程,那么你会想要挂钩到窗口,以便在每次启动应用程序时收到通知。其中一个例子是使用CBT hooks(基于计算机的培训,但也用于其他方面),它允许您在每次创建窗口时收到通知。如果您使用窗口句柄来查找父进程,则可以使用它来跟踪父进程运行的时间。

1

Win32函数GetProcessTimes是一种获取创建时间和CPU时间白天的替代方法。执行时间我假设你的意思是cpu时间而不是挂钟时间。

Here is a link to a blog post描述如何在Delphi中使用GetProcessTimes。

这是比使用WMI更“直接”的方法,但是WMI还有其他优点,例如能够通过网络查询其他机器。

由于skamradt也暗示,此应用程序需要连续运行以跟踪所有启动和停止进程。我知道在启动和停止应用程序上获取事件的唯一方法是使用WMI事件。 See this question for some more info on that以及本Technet blog on scripting

做到这一点的步骤将是

  1. 枚举所有正在运行的进程covered by this question
  2. ,然后调用GetProcessTimes每个进程as described here