17

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

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

4

5 回答 5

8

如果您最小化远程桌面窗口,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。

或者您可以通过以下步骤以编程方式执行此操作:

  • 透明窗口
  • 恢复窗口
  • 捕获
  • 再次最小化
  • 移除透明度
于 2016-02-04T06:07:22.370 回答
1

去年我们在我们的项目中遇到了类似的问题......我们可以找到任何稳定和永久的解决方案......但是这里是一个解决方案如何为我们工作......

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

于 2015-01-02T03:45:44.740 回答
0

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

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

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

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

于 2015-02-20T17:21:54.907 回答
0

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

我不相信有任何其他方法可以解决这个问题。

于 2011-06-28T15:54:26.303 回答
0

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

for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do (tscon.exe %%s /dest:console)
于 2018-07-14T08:43:41.077 回答