Терминальный сеанс при минимизации \disconnected возвращает пустой экран при захвате снимка рабочего стола
Я использую приведенный ниже код 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 2008 R2.
Дополнительные сведения из MSDN:
Почему вы получаете черный экран при отключении от RDP?
http://msdn.microsoft.com/en-us/library/aa383015%28VS.85%29.aspx
Вот моя попытка заставить все работать, но ни один из следующих не сделал трюк:
Как получить данные при сверке окна RDP?
Вы можете заставить драйвер дисплея RDP отправлять данные при минировании, проделать эти шаги и сообщить мне, как это происходит:
1) Добавьте следующий ключ
HKEY_LOCAL_MACHINE\Software\Microsoft\Клиент сервера терминалов\Создал новое значение 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)
В окне "Подключение к удаленному рабочему столу" нажмите "Параметры".
На вкладке "Опыт" убедитесь, что установлен флажок "Кэширование растрового изображения". Или, чтобы отключить кеширование растрового изображения, снимите флажок кэширования элемента управления
Ответы
Ответ 1
Если вы минимизируете окно удаленного рабочего стола, Windows переключает удаленный сеанс в режим без графического интерфейса и не отображает окна и элементы управления. В результате TestComplete (или TestExecute) не сможет взаимодействовать с графическим интерфейсом тестируемых приложений, поскольку он не существует, и ваш автоматический тест GUI завершится неудачно.
Чтобы обойти эту проблему, вы можете изменить параметры реестра Remote Desktop на локальном компьютере (где вы запускаете удаленный рабочий стол):
На локальном компьютере закройте все сеансы удаленного рабочего стола.
Запустите редактор реестра (regedit.exe).
Перейдите к одному из следующих ключей реестра, в зависимости от того, хотите ли вы изменить параметры удаленного рабочего стола только для текущего пользователя или для всех пользователей на компьютере:
HKEY_CURRENT_USER\Программное обеспечение\Microsoft\Клиент сервера терминалов
HKEY_LOCAL_MACHINE\Программное обеспечение\Microsoft\Клиент сервера терминалов
Создайте значение DWORD с именем RemoteDesktop_SuppressWhenMinimized и установите его на 2.
Или вы можете сделать это программно, выполнив следующие шаги:
- Прозрачное окно
- Восстановить окно
- Захват
- Свести к минимуму снова
- Удалить прозрачность
Ответ 2
Если вы подключаете удаленный рабочий стол к тестовому компьютеру, убедитесь, что вы перезагрузили компьютер, когда вы закончите, в противном случае рабочий стол останется заблокированным, а снимки экрана не будут работать.
Я не верю, что есть другие способы решения проблемы.
Ответ 3
У нас была аналогичная проблема в нашем проекте в прошлом году... мы могли найти стабильное и постоянное решение... однако вот как работа работала для нас...
Нам приходилось запускать на 5 удаленных рабочих столах (что также приведет к захвату экрана во время сбоя). Однако, как вы уже поняли, если отключить сеанс или свести к минимуму окно RDC, будет снят пустой снимок экрана. Поэтому мы добавили еще одну виртуальную машину для подключения этих пяти тестовых ящиков. Задача этой виртуальной машины состоит в том, чтобы сохранить сессию активной и измененной на другие 5 ящиков... это сработало для нас.
Ответ 4
Я только что настроил клиентов на автоматический вход в систему, отключил экранную заставку и установил сервер VNC для каждого клиента.
В принципе, убедитесь, что экран всегда включен, и в них нет RDP.
Это работало как на физических ПК, так и на виртуальных машинах, размещенных на сервере Hyper-V.
Я даже написал небольшой настольный клиент .NET, который запускал несколько клиентов VNC в одном окне, чтобы мы могли видеть, что происходит на всех клиентах. У нас был старый компьютер, на котором он работал с монитором поверх шкафа, чтобы (а) позволить разработчикам увидеть, был ли какой-либо клиент висел, открылись сотни окон браузера и т.д. И (б) выглядеть впечатляюще для любых не-разработчиков мимо.