Приложение и активное время

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

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

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

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

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

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

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

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

1 ответ

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

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;
Другие вопросы по тегам