Здравствуйте уважаемые!
У меня есть поток выполняющийся с LocalMachine прилегией (не сервис но поражденный сервисом).
Задача: получать заголовки окон в которых сейчас находится пользователь.
Так вот, как определить каой пользователь в данный момент тыркает мышкой (с у четом того что залогинено 2-3 пользователя одновременно <WinXP>), и как вклинится к нему чтоб можно было делать
GetWindowText(GetActiveWindow(),wndTitle,1024); ?
Здравствуйте, _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