Приложение и активное время
Я пытаюсь реализовать CBT Hook, чтобы сделать одну простую вещь: узнать, какое приложение активно в течение какого времени? Активный означает "пользователь взаимодействует с окном приложения".
Например, пользователь, работающий над предложением в MSWORD, или пользователь, работающий в Интернете на Youtube.
Нам нужно выяснить следующее:
- Название приложения.
- Название документа или URL (если это браузеры IE / Chrome / FF и т. Д.).
- Активное время окна приложения.
Мой подход был:
SetWindowsHookEx()
заWH_CBT
- В моей функции обратного вызова
CBTProcCallBack()
Я проверяю кодHCBT_ACTIVATE
, Я получаю Windows, приложения и детали EXE - Зарегистрируйте время.
Однако не все активные окна захватываются.
Мой подход в порядке, или я ошибаюсь?
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;