【问题标题】:Processes timing处理时间
【发布时间】:2009-12-14 20:28:12
【问题描述】:

如何计算每天每个应用程序Win(进程)与组的总执行时间。

例如: 进程 - notepad.exe - 今天 10 分钟(总共)

【问题讨论】:

    标签: delphi process time


    【解决方案1】:

    我将对 Win32_Process 使用 WMI 查询并检索 CreationDate 值,根据MSDN 是进程开始执行的日期(和时间)。

    Magenta Systems 提供了一个很好的 Delphi 库。该库包含几个示例,可帮助您入门。

    这仅跟踪当前正在运行的进程。如果您想跟踪曾经运行过但不再运行的进程,那么您将需要挂接到窗口,以便在每次应用程序启动时收到通知。一个例子是使用CBT hooks(基于计算机的培训,但它也用于其他事情),它允许您在每次创建窗口时得到通知。如果您使用窗口句柄来查找父进程,那么您可以使用它来自己跟踪父进程运行了多长时间。

    【讨论】:

      【解决方案2】:

      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

      【讨论】:

        猜你喜欢
        • 2017-05-02
        • 2017-06-24
        • 1970-01-01
        • 1970-01-01
        • 2016-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多