【问题标题】:Terminal session when minimized\disconnected returns a blank screen upon capturing desktop snapshot最小化\断开连接时的终端会话在捕获桌面快照时返回空白屏幕
【发布时间】:2011-07-26 11:28:48
【问题描述】:

我正在使用下面的 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) 在“远程桌面连接”窗口中,单击“选项”。

在“体验”选项卡上,确认已选中“位图缓存”复选框。或者,要禁用位图缓存,请清除位图缓存复选框

【问题讨论】:

  • 我看到您将此问题标记为硒。您是否在远程会话中运行硒测试?如果是这样,为什么不直接在远程会话中进行屏幕捕获,作为 selenium 脚本的一部分?

标签: windows-7 selenium remote-desktop rdp terminal-services


【解决方案1】:

如果您最小化远程桌面窗口,Windows 会将远程会话切换到无 GUI 模式并且不显示窗口和控件。因此,TestComplete(或 TestExecute)将无法与被测应用程序的 GUI 交互,因为它不存在并且您的自动化 GUI 测试将失败。 要解决此问题,您可以在本地计算机(启动远程桌面的位置)上更改远程桌面的注册表设置: 在本地计算机上,关闭所有打开的远程桌面会话。 启动注册表编辑器 (regedit.exe)。 导航到以下注册表项之一,具体取决于您是希望为当前用户还是为计算机上的所有用户修改远程桌面设置:

HKEY_CURRENT_USER\Software\Microsoft\终端服务器客户端 HKEY_LOCAL_MACHINE\Software\Microsoft\终端服务器客户端 创建一个名为 RemoteDesktop_SuppressWhenMinimized 的 DWORD 值并将其设置为 2。

或者您可以通过以下步骤以编程方式进行:

  • 透明窗口
  • 恢复窗口
  • 捕获
  • 再次最小化它
  • 移除透明度

【讨论】:

  • 你们是从哪里找到这些隐藏的 DWORD 的???也许这应该是一个问题?这是一个重要的设置;为什么要隐藏它?
【解决方案2】:

我们去年在我们的项目中遇到了类似的问题...我们可以找到任何稳定且永久的解决方案...但是这里是一种解决方法对我们有用...

我们必须在 5 个远程桌面上运行(在失败期间也会进行屏幕截图)..但是您已经知道,如果我们断开会话或最小化 RDC 窗口,则会捕获空白屏幕截图。因此,我们增加了一台虚拟机来连接其他五个测试盒。该虚拟机的任务是保持会话处于活动状态并将其大小调整为其他 5 个框...这对我们有用。

【讨论】:

    【解决方案3】:

    如果您将远程桌面连接到测试机器,请务必在完成后重新启动机器,否则桌面将保持锁定状态并且无法进行屏幕截图。

    我认为没有其他方法可以解决这个问题。

    【讨论】:

      【解决方案4】:

      我刚刚将客户端配置为自动登录,禁用屏幕保护程序并在每个客户端上安装了 VNC 服务器。

      基本上,确保屏幕始终亮着,并且不要 RDP 进入它们。

      这适用于物理 PC 和托管在 Hyper-V 服务器上的虚拟机。

      我什至编写了一个小型 .NET 桌面客户端,它在单个窗口中运行多个 VNC 客户端,因此我们可以看到所有客户端上发生的情况。我们有一台旧 PC 运行它,它的显示器位于橱柜顶部,以 (a) 让开发人员查看是否有任何客户端挂起、是否打开了数百个浏览器窗口等,以及 (b) 让任何非开发人员看起来都令人印象深刻路过。

      【讨论】:

        【解决方案5】:

        终端会话(RDP)转换为控制台会话的上述答案的更简单替代方法。然后会话将显示到物理屏幕(切换当前登录到物理机器的任何人的用户)。以下命令执行此操作:

        for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do (tscon.exe %%s /dest:console)
        

        【讨论】:

          猜你喜欢
          • 2020-12-17
          • 2023-04-07
          • 2011-07-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-07
          • 2012-09-13
          • 1970-01-01
          相关资源
          最近更新 更多