Как получить доступ к окнам в другой сессии
Я разрабатываю приложение для наблюдения за другими приложениями (включая приложения других пользовательских сеансов). Моё приложение должно собирать информацию о загрузке процессора, использовании памяти и состоянии главного окна (если оно существует) каждого приложения. Сейчас я пытаюсь получить состояние окна другого приложения. Если его окно находится в том же сеансе (как мое приложение), то все в порядке.
И... У меня проблема с получением информации о Windows в другой сессии. Я прочитал эту старую тему: Как я могу перечислить открытые окна (~EnumWindows) другого сеанса пользователя, и я понял, что должен начинать новый процесс в каждом сеансе, чтобы перечислять окна на рабочем столе этого сеанса.
Но, может быть, в Windows Server 2012 появилось новое решение для этой проблемы (некоторые новые функции API или некоторое взаимодействие с dwm.exe в другом сеансе и т. Д.)? Если необходимы некоторые административные разрешения (и / или групповые политики), это не проблема
Спасибо
PS. Теперь я использую свойство Process.MainWindowHandle (которое, вероятно, использует функцию GetWindowThreadProcessId). Также я попытался использовать OpenWindowStation("\Sessions\1\Windows\WindowStations\WinSta0"), которая возвращает ошибку 161 (неверный путь)
1 ответ
Вы должны выполнить свой код на рабочем столе, чьи окна вы хотите наблюдать.