最小化 disconnect时终端会话在捕获桌面快照时返回空白屏幕

我使用下面的JAVA代码来捕获远程计算机的桌面
    Robot robot = new Robot();
    BufferedImage screenShot = robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));

    ByteArrayOutputStream imageBytes = new ByteArrayOutputStream();
    ImageIO.write(screenShot, "PNG", imageBytes);

    return imageBytes.toByteArray();
但是,当与远程机器的终端会话最小化或断开连接时,捕获的图像为空白。感谢您帮助解决问题,至少是最小化的方案。 组态: 运行Windows 7的物理机和运行Windows Server 2008 R2的虚拟机存在同样的问题。 来自MSDN的更多见解: 从RDP断开连接时为什么会出现黑屏? http://msdn.microsoft.com/en-us/library/aa383015%28VS.85%29.aspx 这是我尝试使事情有效的方法,但以下都没有做到这一点: RDP窗口最小化时如何获取数据? 您可以强制RDP显示驱动程序在缩小时发送数据,请尝试以下步骤并告诉我它是如何进行的: 1)添加以下密钥 HKEY_LOCAL_MACHINE Software Microsoft Terminal Server Client 创建一个新的DWORD值并将其命名为RemoteDesktop_SuppressWhenMinimized。指定2作为值数据。 注意:还尝试将注册表项添加到HKEY_LOCAL_MACHINE Software Wow6432Node Microsoft Terminal Server Client 2)禁用位图缓存(http://technet.microsoft.com/en-us/library/cc737325(WS.10).aspx) 在“远程桌面连接”窗口中,单击“选项”。 在“体验”选项卡上,验证是否已选中“位图缓存”复选框。或者,要禁用位图缓存,请清除“位图缓存”复选框     
已邀请:
如果最小化远程桌面窗口,Windows会将远程会话切换到无GUI模式,并且不显示窗口和控件。因此,TestComplete(或TestExecute)将无法与测试应用程序的GUI进行交互,因为它不存在,并且您的自动GUI测试将失败。 要解决此问题,您可以在本地计算机(启动远程桌面的位置)上更改远程桌面的注册表设置: 在本地计算机上,关闭所有打开的远程桌面会话。 启动注册表编辑器(regedit.exe)。 导航到以下注册表项之一,具体取决于您是仅为当前用户还是计算机上的所有用户修改远程桌面设置: HKEY_CURRENT_USER Software Microsoft Terminal Server Client HKEY_LOCAL_MACHINE Software Microsoft Terminal Server Client 创建名为RemoteDesktop_SuppressWhenMinimized的DWORD值并将其设置为2。 或者您可以通过以下步骤以编程方式执行此操作: 透明窗口 恢复窗口 捕获 最小化它 删除透明度     
去年我们的项目遇到了类似的问题......我们可以找到任何稳定而永久的解决方案......但是这里的工作方式对我们有用...... 我们不得不在5个远程桌面上运行(在故障期间也会捕获屏幕)..然而,如果我们已经想到如果我们断开会话或最小化RDC窗口空白屏幕截图被捕获。因此,我们添加了一个VM来连接其他五个测试盒。该VM的任务是保持会话活动并调整大小到其他5个框...这对我们有用。     
如果将远程桌面连接到测试计算机,请确保在完成后重新启动计算机,否则桌面将保持锁定状态并且屏幕捕获将不起作用。 我不相信有任何其他方法可以解决这个问题。     
我只是将客户端配置为自动登录,禁用了屏幕保护程序并在每个客户端上安装了VNC服务器。 基本上,确保屏幕始终打开,并且不要使用RDP。 这适用于物理PC和Hyper-V服务器上托管的虚拟机。 我甚至编写了一个小型.NET桌面客户端,它在一个窗口内运行多个VNC客户端,因此我们可以看到所有客户端上发生了什么。我们有一台旧PC运行它,它的显示器位于一个柜子顶部,以便(a)让开发人员看看是否有任何客户端挂起,有数百个浏览器窗口打开等等。(b)让任何非开发人员都看起来令人印象深刻走过去。     
上述答案的简单替代方法是将终端会话(RDP)转换为控制台会话。然后会话将显示到物理屏幕(切换当前登录到物理机的任何人的用户)。以下命令执行此操作:
for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do (tscon.exe %%s /dest:console)
    

要回复问题请先登录注册