Приложение и активное время - PullRequest
1 голос
/ 06 июля 2011

Я пытаюсь реализовать CBT Hook, чтобы сделать одну простую вещь: узнать, какое приложение активно в течение какого времени? Активный означает «пользователь взаимодействует с окном приложения».

Например, пользователь, работающий над предложением в MSWORD, ИЛИ пользователь, работающий в Интернете на Youtube.

Нам нужно выяснить следующее:

  1. Название приложения.
  2. Название документа или URL (если это браузеры IE / Chrome / FF и т. Д.).
  3. Активное время окна приложения.

Мой подход был:

  1. SetWindowsHookEx() для WH_CBT
  2. В моей функции обратного вызова CBTProcCallBack() я проверяю код HCBT_ACTIVATE. Я получаю windows, приложение и exe детали
  3. Записать время.

Однако не все активные окна захватываются.

Мой подход в порядке ИЛИ я ошибаюсь?

1 Ответ

0 голосов
/ 05 марта 2012

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

function ActiveCaption: string;
var
  Handle: THandle;
  Len: LongInt;
  Title: string;
begin
  result := '';
  Handle := GetForegroundWindow;
  if Handle <> 0 then
  begin
    Len := GetWindowTextLength(Handle) + 1;
    SetLength(Title, Len);
    GetWindowText(Handle, PChar(Title), Len);
    ActiveCaption := TrimRight(Title);
  end;
end;
...