在远程Windows服务器(Windows Vista或更高版本)上捕获屏幕
Capturing screen on a remote Windows server (Windows Vista or later)
我的问题是关于从所有桌面(默认,UAC屏幕,Winlogon,屏幕保护程序)安装windows vista或更高版本的远程服务器上捕获屏幕。如何在没有用户本地登录或通过RDP的情况下实现这一点。问题是Vista的变化带来了Windows服务与桌面的隔离。我在这里和那里找到了一些解决这个问题的信息:
- http://www.brianbondy.com/blog/id/100/
- https://serverfault.com/questions/482352/take-screenshot-from-server-screen-while-disconnected-from-rdp
- 为什么在Windows服务中打印屏幕返回黑色图像?
- 服务器桌面会话截图
- https://msdn.microsoft.com/en-us/library/windows/desktop/hh404487 (v = vs.85) . aspx
但不幸的是,我没有看到任何好的解决方案。我想获得类似Windows远程桌面连接克隆的东西。换句话说,带有某种服务器的Windows机器,我可以远程连接并从中获取屏幕截图。
有一个叫做TightVNC的软件,它做了我需要的东西,但它的源代码是在 c++ 中,所以我很难找到如何克服Windows限制的主要思想。也许有人能看出来?
提前感谢您的帮助。
TightVNC Server实现RFB协议。这是一项与微软的RDP(远程桌面协议)非常相似的服务,尽管要简单得多。
TightVNC服务器另外有它自己的编码(称为tight),支持编码的客户端允许您指定图像压缩和质量。
理解"远程屏幕截图"并不像你想象的那样由任何一个协议提供给你。发送图形更新后,您应该管理图像帧缓冲区并不断更新它(尽管您可以要求远程VNC服务器每次都向您发送完整的更新,但即使这样,服务器也会在发送之前将"图像"分解为各种rects)。RDP客户端相当复杂一点(参见FreeRDP项目)。
然而,您的目标似乎是在没有Microsoft RDP可用的情况下进行远程访问。在这种情况下,您只需要在远程桌面上安装一个VNC服务(如TightVNC),在连接的系统上安装一个VNC客户端(如TightVNC的客户端)。除非进行网络配置,否则您应该可以正常工作。您可以从模拟登录用户的服务中启动进程(exe)。这允许您截取屏幕截图。
你需要一个单独的应用程序来获取屏幕截图,因为它必须在一个新的进程中启动。
详细信息:https://stackoverflow.com/a/45095509/125406
- 从预处理器获取 Windows 版本(C++ Win32)
- 升级到 Windows 10 版本 1809 SDK 后,我无法编译使用 C++/WinRT 的项目
- 在 c++ 中检查 Windows OS 服务器版本
- 获取Windows版本的正确方法
- 在任何 Windows 版本上全屏显示控制台
- "此版本的 C:\TURBOC3\BIN\TCC.EXE 与您运行的 Windows 版本不兼容。
- 编译windows版本的一厢情愿
- MinGW .h 编译文件不起作用:此文件的版本与您运行的 Windows 版本不兼容
- 面向多个 Windows 版本
- 如何根据windows版本正确加载GetMappedFileName
- 通过应用程序确定Windows版本
- pthread_tryjoin_np?有没有Windows版本
- 获取Windows版本
- 基于windows版本的c++条件编译
- 获取Windows版本字符串C++
- NDIS 版本和 Windows 版本之间的兼容性问题
- 如何在CMake中检查Windows版本
- Windows 10 home的c++ Windows版本问题
- 如何检查Windows版本是否为正版
- 使用gcc c++获取Windows版本