会话0捕获屏幕

Session 0 capture screen

本文关键字:屏幕 会话      更新时间:2023-10-16

已尝试https://stackoverflow.com/a/30138664/533237并且能够捕获屏幕。

但我想从会话0或其他用户中运行的应用程序捕获屏幕。在捕获之前引入了10秒的睡眠,并切换到另一个用户。还尝试了PsExec.exe-h-s E:\sc.exe。两个都抛出错误

C:UsersunityDocumentsVisual Studio 2015ProjectsConsoleApplication2Debug>sc.exe
FAILURE 0x8876086C (-2005530516)
    line: 60 file: 'c:usersunitydocumentsvisual studio 2015projectsconsoleapplication2consoleapplication2consoleapplication2.cpp'
    expr: 'd3d->GetAdapterDisplayMode(adapter, &mode)'
C:UsersunityDocumentsVisual Studio 2015ProjectsConsoleApplication2Debug>PsExec.exe -h -s  E:sc.exe -w E:
PsExec v2.11 - Execute processes remotely
Copyright (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com

FAILURE 0x8876086C (-2005530516)
    line: 60 file: 'c:usersunitydocumentsvisual studio 2015projectsconsoleapplication2consoleapplication2consoleapplication2.cpp'
    expr: 'd3d->GetAdapterDisplayMode(adapter, &mode)'

注释掉GetAdapterDisplayMode和硬编码的高度和宽度,但CreateDevice未通过

FAILURE 0x8876086A (-2005530518)
    line: 76 file: 'c:usersunitydocumentsvisual studio 2015projectsconsoleapplication2consoleapplication2consoleapplication2.cpp'
    expr: 'd3d->CreateDevice(adapter, D3DDEVTYPE_HAL, NULL, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &parameters, &device)'

编辑时间:想法是让一个单独的应用程序在后台运行,并捕获任何显示的内容,而不管用户是否登录,或者即使没有人登录(锁定/登录屏幕)

这有两个级别的问题。

在某种程度上,虽然很多GDI都可以工作,但会话0并没有链接到一个功能显示设备,当然也不是一个能够进行D3D的设备。

在另一个层面上,虽然DWM之类的东西已经被引入,但Windows API始终提供了一种不可见屏幕像素根本不存在的显示模型。整个窗口显示模型是围绕着让窗口在共享显示表面上进行协作绘制而构建的,并且桌面合成系统会根据需要重新绘制窗口的任何未覆盖部分。

这意味着,从根本上讲,您无法从会话0中截屏任何内容,因为要这样做,会话0必须连接到活动显示设备。