Можно ли увидеть рабочий стол пользователя системы?Как сделать рабочий стол вашего пользователя из другого сеанса? - PullRequest
2 голосов
/ 07 августа 2011

Я запускаю Windows 7. Я запускаю службу Windows, которая запускает программу с графическим интерфейсом.Я не вижу графический интерфейс своей программы, потому что она была запущена из другого сеанса системой или даже моим пользователем.

Есть ли способ увидеть мою программу?Переключить рабочий стол на системного пользователя?

1 Ответ

3 голосов
/ 07 августа 2011

Используйте SetThreadDesktop(), чтобы изменить контекст потока в вашем сервисе на рабочий стол пользователя.

  • SetThreadDesktop() переводит дескриптор на рабочий стол в качестве первого параметра;чтобы получить эту ручку, используйте EnumDesktops().
  • EnumDesktops() берет дескриптор оконной станции в качестве первого параметра;чтобы получить этот дескриптор, используйте EnumWindowStations()

Чтобы понять, что происходит с оконными станциями и рабочими столами, попробуйте прочитать этот обзор из MSDN.

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

...