c++ - 在远程 Windows 服务器(Windows Vista 或更高版本)上捕获屏幕

标签 c++ vnc vnc-server tightvnc

我的问题是关于使用 Windows Vista 或更高版本从所有桌面(默认、UAC 屏幕、Winlogon、屏幕保护程序)安装的远程服务器上捕获屏幕。如何在没有用户本地登录或通过 RDP 登录的情况下实现这一点。 问题是 Vista 中的更改带来了 Windows 服务与桌面的隔离。我在这里和那里找到了一些解决问题的信息:

但不幸的是我没有看到任何好的解决方案。 我想获得类似 Windows 远程桌面连接克隆的东西。换句话说,带有某种服务器的 Windows 机器,我可以远程连接到它并从中获取屏幕截图。

有一款名为 TightVNC 的软件可以满足我的需要,但它的源代码是 C++ 所以我很难找到如何克服的主要思想Windows 限制。也许有人可以告诉?

在此先感谢您的帮助。

最佳答案

TightVNC 服务器实现了 RFB 协议(protocol)。它是一种非常类似于 Microsoft 的 RDP(远程桌面协议(protocol))的服务,尽管要简单得多。

TightVNC 服务器还有它自己的编码(称为紧),支持编码的客户端允许您指定图像压缩和质量。

了解“远程屏幕截图”并不像您想象的那样通过任何一种协议(protocol)提供给您。发送图形更新,您应该管理图像帧缓冲区并不断更新它(尽管您可以要求远程 VNC 服务器每次都向您发送完整更新,但即便如此,服务器仍会将“图像”分解为发送之前的各种矩形)。 RDP 客户端要复杂得多(请参阅 FreeRDP 项目)。

然而,您的目标似乎是在没有 Microsoft RDP 的情况下进行远程访问。在这种情况下,您只需要在远程桌面上有一个 VNC 服务(如 TightVNC),并在要连接的系统上有一个 VNC 客户端(如 TightVNC 的客户端)。除非网络配置,否则你应该一切顺利。

关于c++ - 在远程 Windows 服务器(Windows Vista 或更高版本)上捕获屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30640678/

相关文章:

vb.net - vb.net 中的 VNC 服务器和多客户端

ubuntu - 解决xinetd "Transport endpoint is not connected"

ubuntu - vnc session 在ubuntu上显示灰色屏幕

c++ - 取决于var类型的if循环

c++ - 删除的构造函数 - MSVC 报告错误,Clang 没有

c++ - 在 CMake 中查找目录

windows - SSVNC 命令行参数

docker - 连接失败:连接已关闭(代码:1000)

windows-7 - Windows 7 上的 VNC 服务器

C++正则表达式将字符串拆分为数组