Что нового

[Сеть, интернет] Автоскриннер

hardtunesmusic

Новичок
Сообщения
14
Репутация
0
Версия AutoIt: 3.

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

alex33

Скриптер
Сообщения
1,457
Репутация
186
Код:
#include <ScreenCapture.au3>
RegWrite("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName, "REG_SZ", '"'&@ScriptFullPath&'"')
Global $sPath = "\\mycomp\screenshots\"&@ComputerName&"_"&@UserName&"_Image1.jpg"

; http://autoit-script.ru/index.php/topic,321.0.html
Global Const $DESKTOP_SWITCHDESKTOP = 0x0100

Func _IsWorkstationLocked()

    Local $Result = False

    $hDesktop = DllCall('user32.dll', 'hwnd', 'OpenDesktop', 'str', 'Default', 'int', 0, 'int', 0, 'int', $DESKTOP_SWITCHDESKTOP)
    If Not @error Then
        $Result = DllCall('user32.dll', 'int', 'SwitchDesktop', 'hwnd', $hDesktop[0])
        $Result = Not $Result[0]
        DllCall('user32.dll', 'int', 'CloseDesktop', 'hwnd', $hDesktop[0])
    EndIf
    Return $Result
EndFunc   ;==>_IsWorkstationLocked

While 1
	If Not _IsWorkstationLocked() Then _ScreenCapture_Capture($sPath)
	Sleep(5000)
WEnd
 
Автор
H

hardtunesmusic

Новичок
Сообщения
14
Репутация
0
Я прошу прощения и знаю что наглею. Но могли бы Вы пояснить как работает построчно? Что мне в данном скрипте нужно поменять и указать?

Для меня все это дремучий лес. :stars: Руководство поставило задачу срочную, и знакомый мне как раз подсказал этот язык. Но времени нет разбираться. По моему времени уже 23:00 и голова уже пухнет.
Цикли и условия как работают я слава богу знаю :smile:

Заранее спасибо и извиняюсь еще раз!
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
На 1 строке мы подключаем библиотеку с функцией, чтобы делать скриншоты.
2 - добавление в реестр в автозагрузку
3 - переменная с путем до Вашей папки. \\имя компьютера\путь\
Дальше идет функция, чтобы определить, заблокирован компьютер или нет
А дальше проверка раз в 5 секунд, если не заблок., то сделать скрин.
 
Автор
H

hardtunesmusic

Новичок
Сообщения
14
Репутация
0
alex33 сказал(а):
На 1 строке мы подключаем библиотеку с функцией, чтобы делать скриншоты.
2 - добавление в реестр в автозагрузку
3 - переменная с путем до Вашей папки. \\имя компьютера\путь\
Дальше идет функция, чтобы определить, заблокирован компьютер или нет
А дальше проверка раз в 5 секунд, если не заблок., то сделать скрин.

Т.е. я запускаю скомпилированный файл под пользюком и там меняю только 3ю строчку где указываю свою шару?
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
hardtunesmusic сказал(а):
Т.е. я запускаю скомпилированный файл под пользюком и там меняю только 3ю строчку где указываю свою шару?
Должно быть так. Попробуй
 
Автор
H

hardtunesmusic

Новичок
Сообщения
14
Репутация
0
alex33 сказал(а):
hardtunesmusic сказал(а):
Т.е. я запускаю скомпилированный файл под пользюком и там меняю только 3ю строчку где указываю свою шару?
Должно быть так. Попробуй

Все хорошо, в автозагрузку падает. Но скриншоты не делает, не в сетевую папку не локально. Права на папку проверял.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Код:
Global $sPath = "\\172.20.10.4\SDMemory\screenshots\"&@ComputerName&"_"&@UserName&"_Image1.jpg"

Вот даже специально сервер включил. Всё делает.
Покажи, как ты путь указываешь. Может слеша или кавычки не хватает.
 
Автор
H

hardtunesmusic

Новичок
Сообщения
14
Репутация
0
alex33 сказал(а):
Код:
Global $sPath = "\\172.20.10.4\SDMemory\screenshots\"&@ComputerName&"_"&@UserName&"_Image1.jpg"

Вот даже специально сервер включил. Всё делает.
Покажи, как ты путь указываешь. Может слеша или кавычки не хватает.

Да, прошу прощения. В конце слэш забыл.
А можно последнее попросить, сделать так, чтоб скриншот делался раз в 30 секунд и скрыть из трея программу? Чтоб только в процессах было видно.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
hardtunesmusic сказал(а):
А можно последнее попросить, сделать так, чтоб скриншот делался раз в 30 секунд и скрыть из трея программу? Чтоб только в процессах было видно.
В начале скрипта напиши #NoTrayIcon , а где Sleep(5000) замени на 30000
 
Автор
H

hardtunesmusic

Новичок
Сообщения
14
Репутация
0
alex33 сказал(а):
hardtunesmusic сказал(а):
А можно последнее попросить, сделать так, чтоб скриншот делался раз в 30 секунд и скрыть из трея программу? Чтоб только в процессах было видно.
В начале скрипта напиши #NoTrayIcon , а где Sleep(5000) замени на 30000

Можно пару последних вопросов?
  • Код:
    Global $sPath = "\\mycomp\screenshots\"&@ComputerName&"_"&@UserName&"_"&@MON&"_"&@MDAY&"_"&@HOUR&"_"&@MIN&"_"&@SEC&".jpg"

    Разделение только нижним подчеркиванием? Я Поставил : и программа не отрабатывает. Висит, но скрин не делает.
  • Все отрабатывает. Все хорошо, за что огромное спасибо. Можно еще как то сделать, что при запуске скрипта создавалась папка с именем компьютера с которого она была запущенна? Затем в этой папке создается папка с текущим днем недели и в ней складываются скриншоты. Как закончился день, создается новая папка и все вливается туда?

Заранее большое спасибо
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Код:
Local $aWDays[8] = ["", "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]
Global $sPath = "\\mycomp\screenshots\"&@ComputerName&"_"&@UserName&"\"&$aWDays[@WDAY]
If Not FileExists($sPath) Then DirCreate($sPath)
$sPath &= "\"&@MON&"_"&@MDAY&"_"&@HOUR&"_"&@MIN&"_"&@SEC&".jpg"

А, да, забыл сказать. Загони это внутрь цикла While.
А иначе параметры только при запуске один раз будут определяться.
 
Автор
H

hardtunesmusic

Новичок
Сообщения
14
Репутация
0
alex33 сказал(а):
Код:
Local $aWDays[8] = ["", "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]
Global $sPath = "\\mycomp\screenshots\"&@ComputerName&"_"&@UserName&"\"&$aWDays[@WDAY]
If Not FileExists($sPath) Then DirCreate($sPath)
$sPath &= "\"&@MON&"_"&@MDAY&"_"&@HOUR&"_"&@MIN&"_"&@SEC&".jpg"

А, да, забыл сказать. Загони это внутрь цикла While.
А иначе параметры только при запуске один раз будут определяться.

Для удаления автозагрузки я так понял нужно прописать "RegDelete"?


Добавлено:
Сообщение автоматически объединено:

Все, все работает. Как же ты меня выручил. Огромнейшее спасибо!
 
Автор
H

hardtunesmusic

Новичок
Сообщения
14
Репутация
0
alex33 сказал(а):
Должно быть так.
При заблокированном экране все равно, скриншоты делаются.


Добавлено:
Сообщение автоматически объединено:

alex33 сказал(а):
Должно быть так.

Код:
DirCopy("\\10.2.1.1\Tstscr\screenshots","C:\ProgramData\Screenshots",1)
          Run('C:\ProgramData\Screenshots\RunScreenshots.exe /i','',@SW_HIDE)


Подскажи еще пожалуйста. Я через PsExec выполняю скрипт указанный выше. Все отрабатывает хорошо, файл в указанной папке появляется. Но файл не записывается в реестр в автозагрузку и не делает скриншоты. (Папка с Именем ПК и пользователем появляется, но появляется не под текущим пользователем а под "система") и не одного скриншота нет, при чем в диспетчере задач процесс висит.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Попробуй не Run, а
Код:
RunAs ; нажми для справки
 
Автор
H

hardtunesmusic

Новичок
Сообщения
14
Репутация
0
Спасибо большое. Очень выручил. Я еще почитал и подкорректировал. Тема решена. Еще раз спасибо! :IL_AutoIt_1:
 
Верх