Перехватить события входа / выхода в Windows

У меня есть служба, которая будет работать на уровне СИСТЕМЫ. Теперь я хочу отслеживать вошедшего в него пользователя. Раньше я пытался получить имя пользователя, вошедшего в систему, из API GetUserName, но в моем случае он каждый раз возвращал «СИСТЕМА».

Есть ли способ войти в систему под именем пользователя в моем случае? или есть какой-нибудь крючок, который я могу установить, чтобы узнать, какой пользователь вошел в систему?

P.S: Я в основном работаю в Delphi 2007, но эти вопросы относятся к Win32 API.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
3 976
3

Ответы 3

Вы можете использовать SENS для прослушивания и подписки на уведомления о входе в систему.

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

Самый распространенный запрос - как получить локально вошедшего в систему интерактивного пользователя, то есть человека, который физически сидит за клавиатурой и экраном. Есть различные вопросы, которые вы должны рассмотреть, прежде чем решить, как действовать дальше. В MSDN есть хорошая запись на Оконные станции, которая лучше меня объяснит ситуацию.

ну, я почти уверен, что меня интересует только интерактивный пользователь. Мне нужно отслеживать активность пользователя (сотрудник-трекер), и мне нужно сохранить данные для «текущего пользователя, вошедшего в систему». вот почему я ищу имя пользователя, вошедшего в систему. В настоящее время я делаю это для имени компьютера.

x.509 14.01.2009 18:21

Я не знаком с реализацией служб Windows в Delphi, но где бы вы ни устанавливали элементы управления, принятые службой, вы должны добавить SERVICE_ACCEPT_SESSIONCHANGE. Затем в вашей функции обратного вызова HandlerEx параметр dwEventType будет одним из значений WM_WTSSESSION_CHANGE, а lpEventData будет указателем на структуру WTSSESSION_NOTIFICATION, которая содержит идентификатор сеанса события.

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

Чтобы найти имя пользователя из идентификатора сеанса, используйте WTSQuerySessionInformation со значением WTS_INFO_CLASS WTSUserName.

Stephen Martin 14.01.2009 19:04

Собственно сервисная структура Delphi не поддерживает расширенные уведомления, которые были введены в Win2000 и позже.

Remy Lebeau 04.06.2009 03:50

Другие вопросы по теме