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. надеюсь кому-нибудь тоже пригодится.
Версия:
Категория: Администратирование, Автоматизация, Окна и диалоги, Файловая система, Элементы GUI
Описание:
Требовалась программа которая не требует установки и прав администратора. Работает в скрытом режиме, без установки. Не создает дополнительных TCP/UDP подключений и при этом передает текущее изображение экрана на другой компьютер. Реализованно через создание скриншота и сохранение его в общую папку (ScreenShot). И также 2-я часть которая это изображение у себя динамически обновляет (ScreenView). Функция создания скриншота взята у Yashied.
Код/Пример:
Код:
#Include <ClipBoard.au3>
#Include <GDIPlus.au3>
#include <array.au3>
#NoTrayIcon
$k=0
$pList=ProcessList()
For $i=1 to UBound($pList)-1
if $pList[$i][0]="ScreenShot.exe" then $k+=1
Next
If $k>1 then
msgbox(0,"","ScreenShot.exe уже запущен",2)
exit
EndIf
Global $setingINI="настройки.ini"
Global $IP=IniRead($setingINI,"","$IP","127.0.0.1") ;IP по которому проверять есть связь или нет. (указываешь IP главного компа)
Global $File=IniRead($setingINI,"","$File",@ScriptDir & "\" & "Screenshot.jpg") ;Куда сохранять скриншот
Global $chek=IniRead($setingINI,"","$chek",10) ;Частота обновления в сек.
While 1
if ping($IP, 4000) Then
_ScreenCapture($File)
$chek=IniRead($setingINI,"","$chek",10)
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
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
;Указываем какую функцию выполнять при выключении скрипта разными способами.
OnAutoItExitRegister("ExitMsg")
;Подгрузка настроек при запуске. если настроек нет, то вбивает настройки по умолчанию. и после выкл. создаст ini-файлик.
Global $setingINI="настройки.ini"
Global $File=IniRead($setingINI,"","$File",@ScriptDir & "\" & "Screenshot.jpg") ; Файл скриншота
Global $chek=IniRead($setingINI,"","$chek",5) ;Частота обновления в сек.
Global $old_size[3]=[IniRead($setingINI,"","$old_size[0]",2),IniRead($setingINI,"","$old_size[1]",1280),IniRead($setingINI,"","$old_size[2]",720)] ;размер скрина в пикселях
Global $IP=IniRead($setingINI,"","$IP","127.0.0.1") ;IP главного компа. :-)
Global $IP1=IniRead($setingINI,"","$IP1","127.0.0.1") ;IP адрес / доменное имя / имя NetBIOS первого компьютера
Global $IP2=IniRead($setingINI,"","$IP2","127.0.0.2") ;IP адрес / доменное имя / имя NetBIOS второго компьютера
Global $delay=IniRead($setingINI,"","$delay",200) ;Делей... при проверки пинга... влияет на обновление GUI...
Global $size=$old_size
; меню в трее.
Opt("TrayMenuMode", 1+2)
Global $MenuItem1t = TrayCreateItem("Развернуть")
Global $MenuItem2t = TrayCreateItem("Выход")
GUI_create()
$timer=TimerInit()+10000
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $GUI_exit
Exit
Case $GUI_path
$path=FileOpenDialog("выбор скриншота", -1, "Images (*.jpg;*.bmp)", 3)
GUictrlsetdata($GUI_input, $path)
Case $com
_GUI_update()
Case $GUI_chek
IniWrite($setingINI, "","$chek",GUICtrlRead($GUI_chek,0))
EndSwitch
_UPdate()
$msg = TrayGetMsg()
Switch $msg
Case $MenuItem1t
;~ TrayItemSetState($MenuItem1t,$TRAY_UNCHECKED)
GUISetState(@SW_SHOW)
WinActivate("ScreenView")
Case $MenuItem2t
_iniwrite()
Exit
EndSwitch
WEnd
Func GUI_create()
Global $Form = GUICreate("ScreenView", $size[1]+10, $size[2]+60)
Global $Pic = GUICtrlCreatePic($File, 8, 38, $size[1], $size[2])
Global $GUI_input = GUICtrlCreateInput($File, 8, 8, 200, 21)
Global $GUI_Path = GUICtrlCreateButton("Обзор", 220, 8, 49, 25)
Global $GUI_exit = GUICtrlCreateButton("Выход", $size[1]-60, 8, 57, 25)
Global $ping = GUICtrlCreateLabel("Ping...", 275, 8, 150, 30)
GuiCtrlCreateLabel("Разрешение", 430, 0,80,15)
Global $com=GUICtrlCreateCombo("640*480", 430, 15,80,25) ; create first item
GUICtrlSetData(-1, "800*600|1024*768|1280*1024|1280*720|1440*900|1650*1050|1920*1080", $size[1] & "*" & $size[2]) ;КомбоБокс.. тут можно добавить любое новое разрешение
GuiCtrlCreateLabel("Обн. (Сек)", 510, 0,60,15)
Global $GUI_chek=GuiCtrlCreateInput($chek, 510, 15, 60, 20)
GuiCtrlCreateUpDown(-1)
GUISetState(@SW_SHOW)
EndFunc
Func _GUI_update() ;После смены разрешения пересоздает окно.
$size=StringSplit(GUIctrlread($com, 1), "*")
If $old_size<>$size Then
$chek=GUICtrlRead($GUI_chek)
GUIDelete($form)
$old_size=$size
GUI_create()
EndIf
EndFunc
Func _UPdate() ;обоновляет пинг и картинку. Если нет пинга все равно обновляет текущую картинку. :-)
If TimerDiff($timer)>GUIctrlread($GUI_chek)*1000 then
$ping1=ping($IP1,$delay)
If @error then
$ping1 = "Off"
else
$ping1 &=" ms"
EndIf
$ping2=ping($IP2,$delay)
If @error then
$ping2 = "Off"
else
$ping2 &=" ms"
EndIf
GUICtrlsetdata($ping,"Пинг1: " & $IP1 & " " & $ping1 & @CRLF & _
"Пинг2: " & $IP2 & " " & $ping2)
GUICtrlSetImage($pic,GUICtrlRead($GUI_input))
$timer=TimerInit()
EndIf
EndFunc
; функция срабатывает при выходе.
Func ExitMsg()
;запись настрое в ini
_iniwrite()
; С этим можно поиграться и добавить в скрытый скрипт... который будет материться если его попробовать выключить... :-)
Switch @exitMethod
case 0
;~ msgBox(64, "Exit", 'Как это сам закончился? О_о',2)
case 1
;~ msgBox(64, "Exit", 'Кто нажал на exit?',2)
case 2
;~ msgBox(64, "Exit", 'Не трож значек в трее!',2)
case 3
;~ msgBox(64, "Exit", 'Куда пошел? не выходи из Windows',2)
case 4
;~ msgBox(64, "Exit", 'Я тебе выключу компьютер!!!',2)
EndSwitch
EndFunc ;ExitMsg
;========INI WRITE==========
Func _iniwrite() ;запись настроек при выходе
IniWrite($setingINI, "","$File",GUICtrlRead($GUI_input,0))
IniWrite($setingINI, "","$chek",GUICtrlRead($GUI_chek,0))
IniWrite($setingINI, "","$old_size[0]",$size[0])
IniWrite($setingINI, "","$old_size[1]",$size[1])
IniWrite($setingINI, "","$old_size[2]",$size[2])
IniWrite($setingINI, "","$IP",$IP)
IniWrite($setingINI, "","$IP1",$IP1)
IniWrite($setingINI, "","$IP2",$IP2)
IniWrite($setingINI, "","$delay",$delay)
EndFunc ;_iniwrite
Файл: ZIP-архив(AU3+EXE)
Снимок:
История версий:
001
Источник: autoit-script.ru
Автор(ы): zLo-kazan
P.S. надеюсь кому-нибудь тоже пригодится.