c++ - session 0 捕获屏幕

标签 c++ windows directx

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

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

C:\Users\unity\Documents\Visual Studio 2015\Projects\ConsoleApplication2\Debug>sc.exe
FAILURE 0x8876086C (-2005530516)
    line: 60 file: 'c:\users\unity\documents\visual studio 2015\projects\consoleapplication2\consoleapplication2\consoleapplication2.cpp'
    expr: 'd3d->GetAdapterDisplayMode(adapter, &mode)'

C:\Users\unity\Documents\Visual Studio 2015\Projects\ConsoleApplication2\Debug>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:\users\unity\documents\visual studio 2015\projects\consoleapplication2\consoleapplication2\consoleapplication2.cpp'
    expr: 'd3d->GetAdapterDisplayMode(adapter, &mode)'

注释掉 GetAdapterDisplayMode 并硬编码高度和宽度,但 CreateDevice 失败

FAILURE 0x8876086A (-2005530518)
    line: 76 file: 'c:\users\unity\documents\visual studio 2015\projects\consoleapplication2\consoleapplication2\consoleapplication2.cpp'
    expr: 'd3d->CreateDevice(adapter, D3DDEVTYPE_HAL, NULL, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &parameters, &device)'

编辑: 想法是让一个应用程序在后台运行并捕获任何显示的内容,无论用户是否登录,甚至没有人登录(锁定/登录屏幕)

最佳答案

这有两个层面的问题。

在一个层面上,虽然很多 GDI 都可以工作,但 session 0 没有链接到功能显示设备,当然也不是支持 D3D 的设备。

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

这意味着,从根本上说,您无法从 session 0 中截屏任何内容,因为要做到这一点, session 0 必须连接到事件显示设备。

关于c++ - session 0 捕获屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33435295/

相关文章:

c++ - 是否可以将模板生成的函数作为 f() 和 f<T>()?

windows - 打开另一个用户注册表设置

directx - 如何从交换链获取 DirectX 12 命令队列

c++ - Qt C++ 根据组合框中的选择创建对象

c++ - 没有虚析构函数的情况下删除基类指针会导致内存泄漏吗?

c++ - std::dynarray 与 std::vector

android - 在 Windows 中从 Jenkins 启动 android 模拟器 adb(运行仪器测试,模拟器不会出现)

c# - 进程无法访问文件 'CustomTabsClient_CustomTabsCallbackImpl.class'

c++ - 如何在 DirectX 9 中不使用 D3DX9 绘制线条和字体?

c++ - 如何使用 DirectShow 正确捕获音频