Как получить доступ к окнам в другом сеансе

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

И ... У меня проблема с получением информации об окнах в другом сеансе. Я прочитал эту старую тему: Как могу ли я перечислить открытые окна (~ EnumWindows) другого пользовательского сеанса, и я понял, что должен запускать новый процесс в каждом сеансе, чтобы перечислить окна на рабочем столе этого сеанса.

Но, может быть, в Windows Server 2012 появилось новое решение (я) для этой проблемы (некоторые новые функции API или какое-то взаимодействие с dwm.exe в другом сеансе и т. Д.)? Если требуются некоторые административные разрешения (и / или групповые политики), это не проблема

Спасибо

PS. Теперь я использую свойство Process.MainWindowHandle (которое, вероятно, использует функцию GetWindowThreadProcessId). Также я пробовал использовать OpenWindowStation ("\ Sessions \ 1 \ Windows \ WindowStations \ WinSta0"), который возвращает ошибку 161 (неверный путь)


person oleg kalenchuk    schedule 19.06.2015    source источник
comment
Вряд ли; обеспечение такой функциональности было бы сложным и бесполезным.   -  person Harry Johnston    schedule 19.06.2015
comment
Ресурсы, зависящие от сеанса, такие как окна, просто не могут быть доступны через границы сеанса. Вы ДОЛЖНЫ выполнить процесс в том же сеансе, для которого вы хотите получить доступ к ресурсам.   -  person Remy Lebeau    schedule 19.06.2015


Ответы (1)


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

person David Heffernan    schedule 19.06.2015