2012-02-13 2 views
1

Я нашел окно переднего плана на рабочем столе, используя функцию GetForegroundWindow(). Мне нужно отслеживать, сколько времени каждое приложение проводит на переднем плане и обновляет его в базе данных каждый раз при возобновлении на передний план. Есть ли API для установки счетчика или найти, когда окно не находится в фокусе?Как отслеживать продолжительность времени, в котором активно приложение переднего плана

ответ

1

Существует WH_CBT Тип крюка, поддерживаемый SetWindowsHookEx, который срабатывает при каждом переключении пользователя в другое окно или приложение. How to install Windows hooks from C#.

Однако, если вам не нужна совершенная точность, гораздо проще просто позвонить GetForegroundWindow() один раз в секунду и проверить, изменилось ли числовое значение возвращаемого HWND. Для чего-то вроде приложения для отслеживания активности, которое не нужно замечать полсекунды, этот метод является лучшим выбором.

Советы:

  • GetForegroundWindow() возвращает дескриптор окна, которое в данный момент в фокусе (который может находиться на столе или на панели задач или плавающей виджет так что вам может понадобиться для фильтрации, что), или нулевой дескриптор, если нет окно в настоящее время сосредоточено.
  • Это сверхбыстрый, поэтому нет никакого вреда при вызове его десятки или сотни раз в секунду.
  • Значения дескриптора окна уникальны (по крайней мере, в текущем сеансе пользователя), разные, даже если они принадлежат к разным приложениям, и назначаются таким образом, что уничтоженный дескриптор почти никогда не переназначается сразу.
0

Если вы беспокоитесь о своем собственном приложении, вы можете обрабатывать события Активация/Фокус/Затерянный/Деактивировать. Если вам нужно контролировать все окна, для этого вам нужно использовать Windows Hooks. Одна статья here.

Смежные вопросы