Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Terminal session when minimized\disconnected returns a blank screen upon capturing desktop snapshot

I am using the below JAVA code to capture the desktop of a remote machine

    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();

However the captured image is blank, when the terminal session to the remote machine is either minimized or disconnected. I appreciate your help in resolving the issue, at the very least the minimized scenario.

Configuration: I have the same issues with a physical machine running windows 7 and a virtual machine running windows server 2008 R2.

More insights from MSDN:

Why you get black screen when you disconnect from RDP ?   http://msdn.microsoft.com/en-us/library/aa383015%28VS.85%29.aspx

Here is my attempt to make things work, but none of the following did the trick:  

How to get data when RDP window minimized ?   You can force the RDP display driver to send data when minized, try these steps and let me know how it goes:   1) Add the following key HKEY_LOCAL_MACHINE\Software\Microsoft\Terminal Server Client\ Created a new DWORD value and named it RemoteDesktop_SuppressWhenMinimized. Specified 2 as the value data.

Note: Also tried adding the registry key to HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Terminal Server Client\   2) Disable bitmap caching (http://technet.microsoft.com/en-us/library/cc737325(WS.10).aspx) In the Remote Desktop Connection window, click Options.

On the Experience tab, verify that the Bitmap caching check box is selected. Or, to disable bitmap caching, clear theBitmap caching check box

like image 344
Ram Alagianambi Avatar asked Mar 30 '11 22:03

Ram Alagianambi


People also ask

What is remote session disconnected?

Because of a security error, the client could not connect to the Terminal server. After making sure that you are logged on to the network, try connecting to the server again. Remote desktop disconnected. Because of a security error, the client could not connect to the remote computer.

How do I fix Remote Desktop session has ended?

To resolve this issue, uninstall the Windows update. For more information, see Remote Desktop Breaks after Microsoft Update KB2667402. Note: The preceding link was correct as of April 15, 2016. If you find the link is broken, please provide feedback and a VMware employee will update the link.

How do I reconnect to a remote desktop session?

Navigate to Local Computer > Computer Configuration > Administrative Templates > Windows Components > Remote Desktop Services > Remote Desktop Session Host > Connections. Select Automatic reconnection.

How do I disconnect a terminal session?

Select your server from the left pane, then select the Sessions tab from the right pane. Right click on the session you wish to disconnect and select Disconnect. You should now be able to login to the target server via Terminal Services.


2 Answers

If you minimize the Remote Desktop window, Windows switches the remote session to the GUI-less mode and does not display windows and controls. As a result, TestComplete (or TestExecute) will be unable to interact with the tested application’s GUI, as it does not exist and your automated GUI test will fail. To work around the issue, you can change the Remote Desktop’s registry settings on your local computer (where you launch the Remote Desktop): On your local computer, close all open Remote Desktop sessions. Launch the Registry editor (regedit.exe). Navigate to one of the following Registry keys, depending on whether you wish to modify the Remote Desktop settings only for the current user or for all users on the computer:

HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client HKEY_LOCAL_MACHINE\Software\Microsoft\Terminal Server Client Create a DWORD value named RemoteDesktop_SuppressWhenMinimized and set it to 2.

Or you can do it programmatically by following steps:

  • Transparent the window
  • Restore the Window
  • Capture
  • Minimize it again
  • Remove transparency
like image 80
salsinga Avatar answered Oct 06 '22 00:10

salsinga


We had similar problem in our project last year...we could find any stable and permanent solution....however here is how a work around worked for us...

We had to run on 5 remote desktops (which will take screens capture as well during failure) ..however as you have figured already if we disconnect session or minimise the RDC Window blank screenshot is captured. Therefore we had added one more VM to connect those other five test boxes. The task for that VM is to keep session active and resized to other 5 boxes...this worked for us.

like image 31
PxP Avatar answered Oct 06 '22 00:10

PxP