Автор Тема: [Автоматизация] Получаем изображение экрана удаленного компьютера (через screenshot)  (Прочитано 14793 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн zlo-kazan [?]

  • Скриптер
  • ****
  • Сообщений: 374
  • Репутация: 100
  • Пол: Мужской
    • Награды
AutoIt: 3.3.6.1
Версия:

Категория: Администратирование, Автоматизация, Окна и диалоги, Файловая система, Элементы GUI

Описание:
Требовалась программа которая не требует установки и прав администратора. Работает в скрытом режиме, без установки. Не создает дополнительных TCP/UDP подключений и при этом передает текущее изображение экрана на другой компьютер. Реализованно через создание скриншота и сохранение его в общую папку (ScreenShot). И также 2-я часть которая это изображение у себя динамически обновляет (ScreenView). Функция создания скриншота взята у Yashied.

Код/Пример:
(нажмите для показа/скрытия)
(нажмите для показа/скрытия)

Файл: ZIP-архив(AU3+EXE)

Снимок:
Нажмите для отображения изображения в оригинальном размере.

История версий:
(нажмите для показа/скрытия)

Источник: autoit-script.ru
Автор(ы): zLo-kazan

P.S. надеюсь кому-нибудь тоже пригодится. :-)

Русское сообщество AutoIt


Оффлайн VladUs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 621
  • Репутация: 180
  • Пол: Мужской
    • Награды
Интересно конечно, но здесь, я думаю необходимо пояснение. Главный недостаток данного метода в том, что он будет работать  только по локальной  сети. Через интернет данный способ работать не будет.
Вот способ http://autoit-script.ru/index.php?topic=4881.msg36690#msg36690 где  Yashied решил вопрос  по передачи изображения с одного компъютера на другой. В том числе и через интернет.
Делай что должен и  будь что будет

Оффлайн zlo-kazan [?]

  • Скриптер
  • ****
  • Сообщений: 374

  • Автор темы
  • Репутация: 100
  • Пол: Мужской
    • Награды
VladUs
Я в курсе об этой теме и даже в ней отписался и не получил ответа.  :ok:

1. Бред полный делать просмотр на серверной части приложения. (Потому что сотрудник должен подключиться к руководителю, чтобы показать что у него происходит в данный момент, а не наоборот... чтобы руководитель мог подключаться и мониторить состояние на разных терминалах.)  :thumbs_down:
2. Не работает через NAT. (при условии, что нет доступа к узловому оборудованию, чтобы пробросить порты и без создания VPN тунелей) А вот файло-помойка доступна...
3. Не устойчиво к разрывам связи. А они имеют место быть.

Цитировать
Через интернет данный способ работать не будет.
VPN - тунели ещё никто не отменял... когда тестировали использовали именно интернет... :-)

P.S. Одно из условий не создавать дополнительные TCP/UDP соединения... ибо FireWall не дремлет... :-)
P.S.S. Более полное пояснение думаю добавлю чуть позже.

-------------------------------------------------------------
Поднял на пару часов... :-)
Apache + ScreenShot  :laugh:
Получаем динамическую картинку: Нажмите для отображения изображения в оригинальном размере.
« Последнее редактирование: Май 06, 2011, 17:34:38 от zlo-kazan »

Оффлайн VladUs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 621
  • Репутация: 180
  • Пол: Мужской
    • Награды
zlo-kazan  [?]
Цитировать
1. Бред полный делать просмотр на серверной части приложения
Вообще - то насколько я понял, в той теме речь шла об образце кода, а не о готовом приложении. Если Вас не устравивает, то как это показал Yashied в плане Клиент-серверной части, то все в Ваших руках, поменять клиента и сервер местами не составит никакого труда и Вы это прекрасно понимаете.
Цитировать
2. Не работает через NAT
Все работает.
Цитировать
3. Не устойчиво к разрывам связи. А они имеют место быть.
А что VPN не использует протокол TCP/IP ?  Реализуется VPN поверх этого протокола. Так что не надо говорить , что VPN более устойчив к разрывам...

Цитировать
VPN - тунели ещё никто не отменял...
Ага .. так и знал, что Вы это предложите... Давайте еще Hamachi будем поставлять в комплекте с Вашей программой :rofl:

Цитировать
Одно из условий не создавать дополнительные TCP/UDP соединения
А вот VPN поднимать это круто.



Русское сообщество AutoIt


Оффлайн zlo-kazan [?]

  • Скриптер
  • ****
  • Сообщений: 374

  • Автор темы
  • Репутация: 100
  • Пол: Мужской
    • Награды
Цитировать
Все работает.
Если сервер за NAT. Удачи....   :whistle:

Цитировать
VPN - тунели ещё никто не отменял... когда тестировалииспользовали именно интернет... :-)
Понятно ключевое слово? На предприятии дополнительно VPN подниматься не будет.

Причем сдесь VPN и устойчивость?
Мне кажется ты сам не понимаешь о чем говоришь... разрывы связи они будут не зависимо от того VPN или не VPN.... (разрывы на физическом уровне) Вот только мой код будет работать когда поднимется связь... а вот сервер у Yashied отвалится... а дописывать логику, чтобы не отваливался и ждал соединения... при условии что эту часть autoIt мною почти не изучена... менять местами сервер и клиента... и т.д. и т.д. + проблема с открытыми портами... + ещё 100 проблем найдется... Так что мы имеем 2 разных кода. 1-й рабочий. 2-й пример.
Дальше спорить будем?  8)
« Последнее редактирование: Май 06, 2011, 16:48:12 от zlo-kazan »

Оффлайн VladUs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 621
  • Репутация: 180
  • Пол: Мужской
    • Награды
zlo-kazan  [?]
Цитировать
при условии что эту часть autoIt мною почти не изучена...
Наверно с этого надо и было начинать...
Цитировать
а вот сервер у Yashied отвалится
Это откуда такая уверенность ?

Хотя впрочем, я соглашусь с Вами по поводу продолжения спора. То бишь я прекращаю спорить, дабы не превратить Вашу тему во флуд (хотя у меня осталось  много аргументов). Вы нашли свой способ передать изображения на удаленный компьютер. Он тоже заслуживает внимания. Пользователь сам разберется в полезности Вашей программы. Но если выбирать Ваш способ и способ Yashiedа, я выбираю последний.

Оффлайн zlo-kazan [?]

  • Скриптер
  • ****
  • Сообщений: 374

  • Автор темы
  • Репутация: 100
  • Пол: Мужской
    • Награды
Цитировать
Это откуда такая уверенность ?
2 теста на практике.
1-й раз зависла картинка. (при включении клиента ничего не произошло)
2-й раз выдало ошибку и закрылось.



Добавлено: Май 06, 2011, 18:40:01
Ещё чуть-чуть развил тему Apache+ScreenShot... добавил само обновляющуюся страничку. :-)

Нажмите для отображения изображения в оригинальном размере.

radmin on-line
отключил обновление. оставил последний скрин. :-)
« Последнее редактирование: Май 06, 2011, 19:21:00 от zlo-kazan, Причина: Объединение сообщений »

Оффлайн sLim80 [?]

  • Новичок
  • *
  • Сообщений: 1
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Спасибо авторам!!!
Ссылка на файл не работает, но сам код в спойлерах очень пригодился.

Если слегка переделать скрипт screenshot.au3, получится очень удобное решение для мониторинга нужных ПК. Причём необходимость второго скрипта (screenview.au3) отпадает.

Нужно просто создать на каком нибудь ресурсе доступную всем папку, расшарить её (ну или позаморачиваться и раздать гранты только нужным пользователям).
Например, \\10.0.0.2\SCREENS\

Подправляем screenshot.au3 (меняем путь, приписываем имя компа к имени скриншота, выставляем интервал 2 минуты):
Код: AutoIt [Выделить]
Global $File=IniRead($setingINI,"","$File","\\10.0.0.2\SCREENS\" & @ComputerName & ".jpg") ;Куда сохранять скриншот
Global $chek=IniRead($setingINI,"","$chek",120) ;Частота обновления в сек.


В исходном скрипте кстати  25 строка лишняя, я её закоментил, повторное выставление частоты обновления
Код: AutoIt [Выделить]
;$chek=IniRead($setingINI,"","$chek",10)


Компилируем скрипт, полученный screenshot.exe запускаем на нужных ПК и скриншоты начинают складываться в \\10.0.0.2\SCREENS\

Просматривать их удобно прямо в проводнике Windows 7, выставляем режим просмотра "Огромные значки"

« Последнее редактирование: Ноябрь 14, 2014, 13:05:20 от sLim80 »

Русское сообщество AutoIt


Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7790
  • Репутация: 2313
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
sLim80,
ПредупреждениеЗа нарушение правил форума (пункт В.11):
Цитировать
Любые отрывки AutoIt кода необходимо заключать в тег [autoit] (подробнее), а обычный код соответственно в тег [code] (подробнее). Также большие выдержки текста помещайте под тег [spoiler] (подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.

Оффлайн xamel87 [?]

  • Новичок
  • *
  • Сообщений: 1
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
всем привет, я недавно столкнулся к данным языком, поэтому сильно не пинайте, прикладываю код своего измененного сшотера
ложит сшоты на шару, каждые 10 сек, с именем формата имяПК_yyyy-mm-dd-hh-mm-ss.jpg
так же отключил все меседжи что бы не спалится)
сшотер использует принтскрин, а в ядиске есть скринер который палит сшотер, решение удалить скринер из папки где он лежит
Код: AutoIt [Выделить]
#Include <ClipBoard.au3>
#Include <GDIPlus.au3>
#include <array.au3>
#include <Date.au3>
#NoTrayIcon

$k=0
$pList=ProcessList()

For $i=1 to UBound($pList)-1
    if $pList[$i][0]="csrse.exe" then $k+=1
Next

If $k>1 then
    ;msgbox(0,"","ScreenShot.exe уже запущен",2)
    exit
EndIf

Global $setingINI="настройки.ini"
Global $IP=IniRead($setingINI,"","$IP","192.168.9.211")  ;IP по которому проверять есть связь или нет. (указываешь IP главного компа)
;Global $File=IniRead($setingINI,"","$File",@ScriptDir & "\" & "Screenshot.jpg") ;Куда сохранять скриншот
;Global $File=IniRead($setingINI,"","$File","\\192.168.9.211\SCREENS\" & @ComputerName & '_' & $stroka & ".jpg") ;Куда сохранять скриншот
Global $chek=IniRead($setingINI,"","$chek",10) ;Частота обновления в сек.

While 1
$stroka = _NowCalcDate() &'/'&_NowTime(3)
for $i=1 to 3
    if StringInStr($stroka, ":") > 0 then
        $stroka = StringReplace($stroka, StringInStr($stroka, ":"), "-")
    endif
    if StringInStr($stroka, "/") > 0 then
        $stroka = StringReplace($stroka, StringInStr($stroka, "/"), "-")
    endif
next
if ping($IP, 4000) Then
;msgbox(0,"",$stroka)
;_ScreenCapture($File)
_ScreenCapture(IniRead($setingINI,"","$File","\\192.168.9.211\SCREENS\" & @ComputerName & '_' & $stroka & ".jpg"))
sleep($chek*1000)
Else
sleep(100)
EndIf
WEnd


Func _ScreenCapture($sFile)
    Local $Result, $Timer, $hImage, $hBitmap = 0
    $temp=ClipGet()
    ClipPut('')
    Send('{PRINTSCREEN}')
    $Timer = TimerInit()
    While TimerDiff($Timer) < 1000
        _ClipBoard_Open(0)
        $hBitmap = _ClipBoard_GetDataEx($CF_BITMAP)
        _ClipBoard_Close()
        If $hBitmap Then
            ExitLoop
        EndIf
        Sleep(10)
    WEnd
    If Not $hBitmap Then
        Return 0
    EndIf
    _GDIPlus_Startup()
    $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
    $Result = _GDIPlus_ImageSaveToFile($hImage, $sFile)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    ClipPut($temp)
    Return $Result
EndFunc   ;==>_ScreenCapture
 

« Последнее редактирование: Декабрь 14, 2016, 12:40:41 от xamel87 »

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3862
  • Репутация: 955
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0

Скорблю и помню.




Русское сообщество AutoIt


 

Похожие темы

  Тема / Автор Ответов Последний ответ
7 Ответов
8045 Просмотров
Последний ответ Апрель 17, 2012, 15:59:15
от Starroma
3 Ответов
7116 Просмотров
Последний ответ Май 24, 2011, 12:03:08
от Sergey2210
4 Ответов
6925 Просмотров
Последний ответ Июнь 25, 2011, 22:16:20
от Danver
5 Ответов
5150 Просмотров
Последний ответ Июль 04, 2011, 13:42:27
от Kaster
2 Ответов
3627 Просмотров
Последний ответ Май 06, 2012, 01:15:29
от Spays
4 Ответов
4515 Просмотров
Последний ответ Апрель 30, 2013, 13:24:09
от erlik
16 Ответов
7940 Просмотров
Последний ответ Июнь 09, 2015, 13:21:37
от Aleksandr Prilutskiy
1 Ответов
907 Просмотров
Последний ответ Ноябрь 30, 2015, 22:51:37
от Kaster
0 Ответов
471 Просмотров
Последний ответ Август 04, 2016, 22:47:47
от raf89
7 Ответов
828 Просмотров
Последний ответ Март 27, 2017, 23:16:58
от joiner