2009-03-11 6 views
2

Я пишу службу C#, которая должна извлекать информацию от текущего пользователя, как активное окно или последнее движение мыши. Я уже узнал, что я могу получить эту информацию с помощью user32.dll, но это работает только в контексте пользователя, который вызывает методы.Как получить активное окно зарегистрированного пользователя из службы

Таким образом, мой сервис мог получать информацию только о себе, но не о пользователе «реального мира». Я также слышал, что это должно быть возможно с помощью WTSEnumerateSessions, OpenWindowStation, EnumDesktops и т. Д., Но я не нашел примера, показывающего, как это сделать.

У кого-нибудь есть ключ (или, может быть, некоторые примеры кода), как достичь моей цели?

ответ

4

Это очень похоже на работу для приложения, работающего в сеансе пользователя. Хорошо подобранная служба не должна отслеживать такого пользователя. Там может быть способами сделать это (я честно не знаю), но это звучит не очень ... правильно.

Обратите внимание, что при последних версиях окон сеанс консоли (сеанс 0) ограничивается целями администратора, и пользователь не будет (обычно) там. У вас может быть ноль, один или несколько сеансов без консоли.

+0

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

+0

Просто перезагрузите приложение. – Samuel

+0

Я думал о создании пользовательского приложения и дополнительной службы, но как служба может перезапустить приложение в сеансе пользователя без наличия учетных данных пользователя? – Marcus