Сеанс терминала при свёртывании \ отключении возвращает пустой экран при захвате снимка рабочего стола - PullRequest
15 голосов
/ 31 марта 2011

Я использую приведенный ниже код 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) В удаленном рабочем столеВ окне «Соединение» нажмите «Параметры».

На вкладке «Опыт» убедитесь, что установлен флажок Кэширование растрового изображения, или, чтобы отключить кэширование растрового изображения, снимите флажок Кэширование растрового изображения

Ответы [ 5 ]

7 голосов
/ 04 февраля 2016

Если свернуть окно удаленного рабочего стола, Windows переключает удаленный сеанс в режим без графического интерфейса и не отображает окна и элементы управления.В результате TestComplete (или TestExecute) не сможет взаимодействовать с GUI тестируемого приложения, так как он не существует, и ваш автоматический тест GUI не будет выполнен.Чтобы обойти эту проблему, вы можете изменить параметры реестра удаленного рабочего стола на локальном компьютере (где вы запускаете удаленный рабочий стол). На локальном компьютере закройте все открытые сеансы удаленного рабочего стола.Запустите редактор реестра (regedit.exe).Перейдите к одному из следующих разделов реестра, в зависимости от того, хотите ли вы изменить параметры удаленного рабочего стола только для текущего пользователя или для всех пользователей на компьютере:

HKEY_CURRENT_USER \ Software \ Microsoft \ Terminal Server Client HKEY_LOCAL_MACHINE \Программное обеспечение \ Microsoft \ Terminal Server Client Создайте значение DWORD с именем RemoteDesktop_SuppressWhenMinimized и установите его равным 2.

Или вы можете сделать это программно, выполнив следующие действия:

  • Прозрачное окно
  • Восстановить окно
  • Захват
  • Свернуть его снова
  • Удалить прозрачность
1 голос
/ 02 января 2015

У нас была похожая проблема в нашем проекте в прошлом году ... мы могли найти любое стабильное и постоянное решение ... однако вот как обходной путь работал для нас ...

Нам пришлось работать на 5 удаленных рабочих столах (которые также будут снимать экраны во время сбоя). Однако, как вы уже поняли, если мы отключаем сеанс или минимизируем снимок экрана с пустым окном RDC. Поэтому мы добавили еще одну виртуальную машину для подключения этих пяти других тестовых блоков. Задача для этой виртуальной машины состоит в том, чтобы поддерживать сессию активной и изменять ее размер на другие 5 блоков ... это сработало для нас.

0 голосов
/ 14 июля 2018

Более простая альтернатива приведенным выше ответам для преобразования терминального сеанса (RDP) в консольный сеанс .Затем сеанс отобразится на физическом экране (переключение пользователя, который в данный момент вошел на физическую машину).Следующая команда делает это:

for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do (tscon.exe %%s /dest:console)
0 голосов
/ 20 февраля 2015

Я только что настроил клиенты на автоматический вход в систему, отключил заставку и установил VNC-сервер на каждом клиенте.

В основном, убедитесь, что экран всегда включен, и не включайте в него RDP.

Это работало как на физических ПК, так и на виртуальных машинах, размещенных на сервере Hyper-V.

Я даже написал небольшой клиент для настольных компьютеров .NET, который запускал несколько клиентов VNC в одном окне, чтобы мы могли видеть, что происходит на всех клиентах. У нас был старый ПК с установленным на нем монитором сверху шкафа, чтобы (а) позволить разработчикам увидеть, висел ли какой-либо клиент, открыты ли сотни окон браузера и т. Д., И (б) выглядеть впечатляюще для любых не-разработчиков проходя мимо.

0 голосов
/ 28 июня 2011

Если вы подключаете удаленный рабочий стол к тестовому компьютеру, обязательно перезагрузите компьютер, когда закончите, иначе рабочий стол останется заблокированным и снимки экрана не будут работать.

Я не верю, что тамЛюбой другой способ обойти проблему.

...