Как проверить текущий пользователь вошел в систему и время вошли - PullRequest
2 голосов
/ 15 марта 2012

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

Мне нужно знать это, чтобы выгнать пользователя, когда он превысит определенный лимит времени.

Я буду использовать C # или Delphi, я хотел бы указатьмне узнать, какие API нужно искать, чтобы получить эту информацию.

Уже есть программное обеспечение, которое проверяет это, как предназначенное для проверки использования детского компьютера, мне нужно что-то подобное, но я настрою для другой цели, чем смотретьДети.

На самом деле, мне, возможно, просто нужно знать, когда пользователь вошел в систему, и из этого я сам вычислю остальное.

Ответы [ 3 ]

3 голосов
/ 15 марта 2012

Попробуйте класс WMI Win32_LogonSession, проверьте свойства StartTime, LogonId и LogonType. Также вы можете взглянуть на класс Win32_Session.

2 голосов
/ 16 марта 2012

Источником информации является SECURITY_LOGON_SESSION_DATA . Вы можете использовать LsaGetLogonSessionData или LsaEnumerateLogonSessions . Чтобы получить идентификатор сеанса потока (или токен входа пользователя), вы можете использовать GetTokenInformation с TokenSessionId в качестве параметра.

В старом ответе вы найдете исходный код небольшой демонстрационной версии.

Если вам нужен монитор вход и выход пользователя из системы, я бы порекомендовал вам реализовать интерфейс обратного вызова ISensLogon2 (см. Служба уведомления о системных событиях (SENS) ) в вашей службе Windows. Если вы планируете использовать его в C #, я бы порекомендовал вам статью .

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

Возможно, вам понадобится опросить журнал событий Windows, чтобы получить эту информацию. Эрик Фитцджеральд говорит об этом здесь . Также обратите внимание, что он ссылается на здесь о том, что полагаться на событие LogOff ненадежно. Здесь упоминается мой комментарий выше о людях, которые вытаскивают аккорд силы.

В статьях также упоминаются идиосинкразии, такие как блокировка рабочей станции и т. Д. *

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