Сроки процессов - PullRequest
       15

Сроки процессов

1 голос
/ 14 декабря 2009

Как рассчитать общее время выполнения каждого приложения Win (процесса) с группой на день.

Например: процесс - notepad.exe - сегодня 10 минут (всего)

Ответы [ 2 ]

4 голосов
/ 15 декабря 2009

Я бы использовал WMI-запрос к Win32_Process и получил бы значение CreationDate, которое согласно MSDN - это дата (и время), когда процесс начал выполняться.

Хорошая библиотека для Delphi доступна по адресу Magenta Systems . Эта библиотека содержит несколько примеров, которые помогут вам начать работу.

Отслеживает только запущенные в данный момент процессы. Если вы хотите отслеживать процессы, которые были запущены один раз, но больше не работают, то вам нужно подключиться к окнам, чтобы вы получали уведомление при каждом запуске приложения. Одним из примеров этого может быть использование CBT hooks (компьютерное обучение, но оно используется и для других целей), которые позволяют получать уведомления при каждом создании окна. Если вы используете дескриптор окна, чтобы затем найти родительский процесс, вы можете использовать его для отслеживания того, как долго выполняется родительский процесс.

1 голос
/ 17 декабря 2009

Функция Win32 GetProcessTimes - это альтернативный способ получить время создания и время процессора, потраченное в течение дня. Под временем выполнения я предполагаю, что вы имеете в виду время процессора, а не время настенных часов.

Вот ссылка на сообщение в блоге , описывающее использование GetProcessTimes в Delphi.

Это более "прямой" подход, чем использование WMI, однако у WMI есть и другие преимущества, такие как возможность запрашивать другие машины по сети.

Как skamradt также предполагает, что это приложение должно работать непрерывно для отслеживания всех процессов запуска и остановки. Единственный известный мне способ получения событий при запуске и остановке приложений - это использование событий WMI. См. Этот вопрос для получения дополнительной информации об этом , а также об этом блоге Technet по сценариям

Шаги для этого были бы

  1. перечисление всех запущенных процессов , охватываемых этим вопросом
  2. , а затем вызовите GetProcessTimes для каждого процесса , как описано здесь .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...