Как отслеживать продолжительность времени, в течение которого приложение переднего плана активно - PullRequest
1 голос
/ 13 февраля 2012

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

Ответы [ 2 ]

1 голос
/ 14 февраля 2012

SetWindowsHookEx поддерживает WH_CBT тип хука, который срабатывает каждый раз, когда пользователь переключается на другое окно или приложение. Как установить хуки для Windows из C # .

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

Советы:

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

Если вас беспокоит ваше собственное приложение, вы можете обрабатывать события Activate / Focus / LostFocus / DeActivate. Если вам нужно контролировать все окна, для этого вам нужно использовать Windows Hooks. Одна статья здесь .

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