Как присосаться к активному юзеру?
От: _abraksas_  
Дата: 15.01.03 04:01
Оценка:
Здравствуйте уважаемые!

У меня есть поток выполняющийся с LocalMachine прилегией (не сервис но поражденный сервисом).
Задача: получать заголовки окон в которых сейчас находится пользователь.
Так вот, как определить каой пользователь в данный момент тыркает мышкой (с у четом того что залогинено 2-3 пользователя одновременно <WinXP>), и как вклинится к нему чтоб можно было делать
GetWindowText(GetActiveWindow(),wndTitle,1024); ?
Re: Как присосаться к активному юзеру?
От: Alex Fedotov США  
Дата: 15.01.03 07:05
Оценка: 10 (1)
Здравствуйте, _abraksas_, Вы писали:

A>Здравствуйте уважаемые!


A>У меня есть поток выполняющийся с LocalMachine прилегией (не сервис но поражденный сервисом).

A>Задача: получать заголовки окон в которых сейчас находится пользователь.

A>Так вот, как определить каой пользователь в данный момент тыркает мышкой (с у четом того что залогинено 2-3 пользователя одновременно <WinXP>),


Это легко, WTSGetActiveConsoleSessionId.

A>и как вклинится к нему чтоб можно было делать GetWindowText(GetActiveWindow(),wndTitle,1024); ?


Это сложнее. Даже если на время забыть про оконные станции и десктопы, твой процесс, как порожденный сервисом, выполняется в сессии 0 и не может иметь доступа к окнам другой сессии (каждая сессия имеет свою копию csrss.exe и win32k.sys).

Единственный выход — это создать процесс в сессии пользователя, который и будет заниматься сбором информации. Имея права LocalSystem, это несложно сделать, как однажды уже обсуждалось (WTSQueryUserToken -> CreateProcessAsUser).

Вот этот thread также может оказаться полезным: http://www.rsdn.ru/Forum/Message.aspx?mid=39674
Автор: SergH
Дата: 28.03.02
-- Alex Fedotov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.