eXeL@B —› Вопросы новичков —› Сделать скриншот под SYSTEM |
Посл.ответ | Сообщение |
|
Создано: 23 мая 2019 02:32 · Поправил: vden · Личное сообщение · #1 Мой код работает под пользователем SYSTEM и делает снимок, вроде такого т.е. вкратце hWindowStation = OpenWindowStationA( "WinSta0", FALSE, WINSTA_ALL_ACCESS ); SetProcessWindowStation( hWindowStation ); hInputDesktop = OpenInputDesktop( 0, FALSE, MAXIMUM_ALLOWED ); SetThreadDesktop( hInputDesktop ); ... и делает снимок Сам снимок пока не вижу (там идет обработка, которая падает), но по разрешению видно что это не экран пользователя. Вот текст из лога 17:22:31 SM_CXVIRTUALSCREEN = 1024 17:22:31 SM_CYVIRTUALSCREEN = 768 17:22:31 bmiHeader.biWidth = 1024 17:22:31 bmiHeader.biHeight = 768 а должно быть 1920 x 1080 у user-а Видимо другая сессия (system). Как правильно сделать снимок экрана user-a? win7, win10 |
|
Создано: 23 мая 2019 02:46 · Личное сообщение · #2 vden пишет: Как правильно сделать снимок экрана user-a? Запустить процесс в сессии юзера и уже из него делать скриншот. Службы начиная с висты живут в сессии 0, которая от гуя изолирована. | Сообщение посчитали полезным: vden |
|
Создано: 23 мая 2019 02:48 · Личное сообщение · #3 |
|
Создано: 23 мая 2019 02:49 · Личное сообщение · #4 |
|
Создано: 23 мая 2019 02:49 · Поправил: vden · Личное сообщение · #5 А не поможет имперсонация, вроде Чтобы, например, запустить поток, который делает снимки от имени другого пользователя, но в моем процессе. |
|
Создано: 23 мая 2019 02:56 · Личное сообщение · #6 |
|
Создано: 23 мая 2019 08:25 · Личное сообщение · #7 В виндах иерархия идёт сессия-станции-десктопы-окна Юзеров может быть несколько, и сессия для каждого своя. Приложения, соответственно, присоединяются к сессии запустившего их юзера, и после запуска уже нет способа переключить сессию - это основа безопасности. Все они изолированы друг от друга по максимуму, никаких документированых АПИ вы не найдете. Я не проверял, возможно есть вариант создать локальное рдп подключение, но юзер должен будет согласиться на это. | Сообщение посчитали полезным: vden |
|
Создано: 23 мая 2019 09:17 · Личное сообщение · #8 Ну пару линков с ходу гуглится. https://brianbondy.com/blog/100/understanding-windows-at-a-deeper-level-sessions-window-stations-and-desktops https://docs.microsoft.com/en-us/windows/desktop/api/processthreadsapi/nf-processthreadsapi-createprocessasusera https://docs.microsoft.com/en-us/previous-versions//aa379608(v=vs.85) Вобщем, идея со стартом процесса под другим юзером, который сделает скрин и по пайпу (например) зашлет его твоему основному сервису. ----- старый пень | Сообщение посчитали полезным: vden, difexacaw |
|
Создано: 23 мая 2019 22:30 · Поправил: difexacaw · Личное сообщение · #9 |
|
Создано: 23 мая 2019 23:58 · Поправил: DenCoder · Личное сообщение · #10 |
|
Создано: 24 мая 2019 12:03 · Личное сообщение · #11 |
eXeL@B —› Вопросы новичков —› Сделать скриншот под SYSTEM |
Эта тема закрыта. Ответы больше не принимаются. |