Что нового

[Окна, Диалоги] Черный скриншот

Acid Burn

Новичок
Сообщения
11
Репутация
0
Добрый день!
Такая ситуация: подключаюсь к серверу через удаленный рабочий стол, там запускаю свою программку которая по определенному условию (например по выскакиванию окна), должна сделать скриншот. Сворачиваю "Подключение к удаленному рабочему столу". Программа скриншот делает, но он черный.
Вот кусочек кода:
Код:
If WinExists($okno) Then
  _ScreenCapture_Capture(@DesktopDir&'\ScreenShot.jpg', 0, 0, @DesktopWidth, @DesktopHeight)
Endif


Подскажите как решить данную проблему? Заранее Спасибо!
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Acid Burn [?]
через удаленный рабочий стол, там запускаю свою программку
При подключении по RDP на ТОМ компьютере появляется экран приветствия (входа в систему), т.к. сеанс пользователя на ТОМ компьютере блокируется. Поэтому никаких окон (GUI) на ТОМ компьютере не отображается и снимок сделать не получится.
Для возможности снятия скриншотов нужно пользоваться альтернативными программами: TeamViewer, AmmyAdmin, RAdmin и др.
 
Автор
A

Acid Burn

Новичок
Сообщения
11
Репутация
0
InnI [?]
Я не совсем понял, я запускаю RDP, ввожу на экране приветствия логин и пароль, вход выполнен. Вижу рабочий стол и запущенные программы, RDP не закрываю, а только сворачиваю, вход при этом в систему остается выполненным. Что оно там блокирует? Вы имеете ввиду сеанс "локальный" не удаленный? И при этом программа отлавливает всплывающее окно, считывает его содержимое и делает по его координатам скриншот(не весь экран, а именно этот кусочек, но он тоже черный).
Но это сервер, и на него ставить перечисленные программы не будут. Может есть еще какие варианты?
Спасибо!
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Acid Burn [?]
Вижу рабочий стол и запущенные программы
Это вы видите у себя на компьютере на своём мониторе. А что вы видите на мониторе сервера? Там отображается окно, которое вы фотографируете?
Кстати, а если не сворачивать окно RDP, скриншот получается?
 
Автор
A

Acid Burn

Новичок
Сообщения
11
Репутация
0
InnI [?]
Да, если не сворачивать, то скрин получается.
И странно, программа же отлавливает всплывающее окно, при свернутом RDP.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Acid Burn [?]
Да, если не сворачивать, то скрин получается.
Значит, не сворачивайте.
Есть там один нюанс - при сворачивании клиента RDP перестаёт передавать некоторые данные (вроде графические) для экономии трафика.
И странно, программа же отлавливает всплывающее окно.
Принцип работы RDP такой, что сервер создаёт окно и передаёт данные на клиента, а клиент рисует окно самостоятельно. Поэтому при подключении к обычному компьютеру (не терминальному серверу) скриншоты вообще не снимаются. А в терминальном сервере, видимо, немного другие механизмы (точнее сказать не могу).
 
Автор
A

Acid Burn

Новичок
Сообщения
11
Репутация
0
Эх, ладно не буду сворачивать, запущу может на отдельном компьютере RDP сессию :(
Спасибо за помощь!
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
InnI [?]
Поэтому при подключении к обычному компьютеру ... скриншоты вообще не снимаются.
Уточняю сам себя после дополнительной проверки.
При подключении к компьютеру с Windows XP, если окно RDP не свёрнуто, то скриншоты получаются, если свёрнуто, то скриншот чёрный.
При подключении к компьютеру с Windows 7 скриншоты получаются и при свёрнутом и при не свёрнутом окне клиента.
 
Автор
A

Acid Burn

Новичок
Сообщения
11
Репутация
0
InnI [?]
У меня система Windows 7 64bit, подключаюсь к Windows 2003 Server, при развернутом окне делает скрин, при свернутом делает черный.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Acid Burn [?]
подключаюсь к Windows 2003 Server
По графической подсистеме это таже ХР.
запущу может на отдельном компьютере RDP сессию
Можно попробовать следующее:
1. Перейти из полноэкранного режима в оконный, вручную уменьшить размер окна до минимута, переместить "в уголок".
2. Перейти из полноэкранного режима в оконный, при помощи команды
Код:
WinMove()
переместить окно за пределы рабочего стола.
Таким образом окно клиента не будет свёрнуто и не будет мешать.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Или создать новый рабочий стол, и открыть это окно там
 
Автор
A

Acid Burn

Новичок
Сообщения
11
Репутация
0
InnI [?]

Так и сделал - RDP сделал как окно и повесил на второй монитор на задний план(хорошо он есть :smile:). Теперь скрины делает.
З.Ы. Не очень удобный вариант :(, а что делать :smile:
Будем считать тему закрытой...
 

Somebody

Новичок
Сообщения
1
Репутация
0
Нашел еще вариант блокировать пользовательскую сессию:
Код:
tscon.exe RDP-Tcp#0 /desc:console
используя cmd, либо сделать bat'ник с вычислениями текущей сессии и выбрасыванием из нее:
Код:
for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do (
  %windir%\System32\tscon.exe %%s /dest:console
)
Работает на Windows 2012 и на 7, другие под руку не попадались;)
С 7 есть косяк, на доменных тачках надо запускать через "запуск от имени администратора", на 2012 через обычный RunWait влетает(правда запускал из под сессии .\Administator).
 

joker2d

Новичок
Сообщения
182
Репутация
0
Somebody сказал(а):
Нашел еще вариант блокировать пользовательскую сессию:
Код:
tscon.exe RDP-Tcp#0 /desc:console
используя cmd, либо сделать bat'ник с вычислениями текущей сессии и выбрасыванием из нее:
Код:
for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do (
  %windir%\System32\tscon.exe %%s /dest:console
)
Работает на Windows 2012 и на 7, другие под руку не попадались;)
С 7 есть косяк, на доменных тачках надо запускать через "запуск от имени администратора", на 2012 через обычный RunWait влетает(правда запускал из под сессии .\Administator).
А где брать имена сеансов как у вас в примере RDP-Tcp#0 ? и понять к каким окнам они относятся?

ввожу в консоле
tscon.exe RDP-Tcp#0 /desc:console
получаю ответ
Ошибка в параметрах
 
Верх