Что нового

Создание jpg файла

Timerlan

Новичок
Сообщения
93
Репутация
0
Здравствуйте гуру. Хотел бы написать маленький скриптик но чет не могу. Суть скрипта такая. Создается папка скажем на диске С:\screen\тут дата создания папки\. Дальше мне нужно создать в этой папки файлы пустые .jpg и надо создать их много порядка 60 штук. например у нас есть папка screen\18.03.2013\ тут создаем файлы: нету_1.jpg,нету_2,нету_3...........нету_60. Я уже начал а дальше пока в ступоре
Код:
$s_date = StringFormat('%s.%s.%s.%s', @MDAY, @MON, @YEAR)
DirCreate("C:\\screen\" & $s_date)


Далее есть у меня еще один скрип которые создает скрины и копирует их на шару
Код:
#NoTrayIcon
#include <ScreenCapture.au3>
#include <File.au3>
Global $iTimeOut = 60000;таймаут в мсек

HotKeySet('{Esc}', '_Exit')
;_MyScreen()
;AdlibRegister('_MyScreen', $iTimeOut)
Global $s_Dir = @ScriptDir & '\Screen\'
While 1
    If @HOUR = '12'And @MIN = '00' And @SEC = '00' Then _MyScreen()
    If @MDAY = '20' And @HOUR = '12' And @MIN = '00' And @SEC = '00' Then
    $array = _FileListToArray($s_Dir,'*.png',1)
    For $i = 1 To UBound($array) -1
        FileDelete($array[$i])
    Next
    EndIf
    Sleep(100)
WEnd

Func _MyScreen()
 Local $s_FileName, $f_Cursor = False

    If Not FileExists($s_Dir) Then DirCreate($s_Dir)
    $s_FileName = StringFormat('%s_%s_%s_%s_%s_%s_%s.png', @ComputerName, @MDAY, @MON, @YEAR, @HOUR, @MIN, @SEC);имя компьютора
    ;$s_FileName = StringFormat('%s_%s_%s_%s_%s_%s_%s.jpg', StringReplace(@IPAddress1, '.', '_'), @MDAY, @MON, @YEAR, @HOUR, @MIN, @SEC);IP-адрес
    _ScreenCapture_Capture($s_Dir & $s_FileName, 0, 0, @DesktopWidth, @DesktopHeight, $f_Cursor)
    FileCopy($s_Dir & $s_FileName,'шара\'&$s_FileName)
EndFunc   ;==>_MyScreen

Func _Exit()
    Exit
EndFunc


В итоге что у нас получается есть сервак где есть папка расшаренная на этом серваке создается папка с датой и файлами и копируются туда скрины. мне нужно сделать как то так чтоб допустим на серваке у нас создались пустой файл типа нету_1 и второй скрипт сделал скриншот и кунул туда свой файл типа готово_1. Суть такая мне нужно чтоб проивелась замена файла нету_1 поменялось на готово_1 и так далее все 60 файлов. Уф вроде бы все расписал)))
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Код:
$s_date = StringFormat('%s.%s.%s.%s', @MDAY, @MON, @YEAR)
For $i = 1 To 60
	$file = FileOpen("C:\\screen\" & $s_date & "\нету_"&$i&".jpg", 10)
	FileClose($file)
Next
 
Автор
T

Timerlan

Новичок
Сообщения
93
Репутация
0
А как сделать вторую часть скрипта. Ну суть понятен наверно. Я запускаю скрипт на 60 разных компах. И эти скрины скидываются в общую шару где храянтся у нас пустышки-картинки. Мне нужно чтоб они заменялись нормальными скринами. Например есть у нас в шаре файлы jpg нету_1, нету_2...... нету_60 нужно чтоб они заменились ну соответственно если скрин сделал и перкинут на шару на готово_1, готово_2,......готово_60
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
ну так перед копирование удаляй файл пустышку. только твой скрипт должен знать имена файлов-пустышек
 
Автор
T

Timerlan

Новичок
Сообщения
93
Репутация
0
ну как это сделать чет не совсем могу понять. точнее не понять не могу а как реализовать чтоб было правильно.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Код:
Func _MyScreen()
 Local $s_FileName, $f_Cursor = False

    If Not FileExists($s_Dir) Then DirCreate($s_Dir)
    $s_FileName = StringFormat('%s_%s_%s_%s_%s_%s_%s.png', @ComputerName, @MDAY, @MON, @YEAR, @HOUR, @MIN, @SEC);имя компьютора
    ;$s_FileName = StringFormat('%s_%s_%s_%s_%s_%s_%s.jpg', StringReplace(@IPAddress1, '.', '_'), @MDAY, @MON, @YEAR, @HOUR, @MIN, @SEC);IP-адрес
    _ScreenCapture_Capture($s_Dir & $s_FileName, 0, 0, @DesktopWidth, @DesktopHeight, $f_Cursor)
	$array_shar = _FileListToArray('путь к папке на шаре','*.png',1)
	For $i To UBound($array_shar) -1
	$string = StringRegExpReplace($array_shar[$i], '^.*\\', '')
	$string_comp = StringInStr($string, 'нету_')
	If Not $string_comp = 0 Then
		FileDelete($array_shar[$i])
		FileCopy($s_Dir & $s_FileName,'шара\' & $s_FileName)
		ExitLoop
	Next
EndFunc   ;==>_MyScreen

может так?
только с именами для файлов разберись.
в данной функции будет меняться первый найденный файл "нету_(номер).png"
 
Автор
T

Timerlan

Новичок
Сообщения
93
Репутация
0
Чет не хочет работать(((( Я сделал так
Код:
Func _MyScreen()
 Local $s_FileName, $f_Cursor = False, $s_date = StringFormat('%s.%s.%s.%s', @MDAY, @MON, @YEAR)

    If Not FileExists($s_Dir) Then DirCreate($s_Dir)
    $s_FileName = StringFormat('%s.%s.%s.%s %s.%s.%s.jpg', @ComputerName, @MDAY, @MON, @YEAR, @HOUR, @MIN, @SEC);имя компьютора
    ;$s_FileName = StringFormat('%s_%s_%s_%s_%s_%s_%s.jpg', StringReplace(@IPAddress1, '.', '_'), @MDAY, @MON, @YEAR, @HOUR, @MIN, @SEC);IP-адрес
    _ScreenCapture_Capture($s_Dir & $s_FileName, 0, 0, @DesktopWidth, @DesktopHeight, $f_Cursor)
    $array_shar = _FileListToArray('C:\screen\','*.jpg',1)
    For $i To UBound($array_shar) -1
    $string = StringRegExpReplace($array_shar[$i], '^.*\\', '')
    $string_comp = StringInStr($string, 'NoScreen_0201')
    If Not $string_comp = 0 Then
        FileDelete($array_shar[$i])
        FileCopy($s_Dir & $s_FileName,'C:\screen\' & $s_date, & $s_FileName)
        ExitLoop
EndIf
	Next
EndFunc

как я понимаю
Код:
$string_comp = StringInStr($string, 'NoScreen_0201')
он будет заменят именно этот файл да
Код:
'NoScreen_0201'


У меня выдает вот такую ошибку
b48433c7d363.jpg
 
Автор
T

Timerlan

Новичок
Сообщения
93
Репутация
0
Че то он не хочет копировать и удалять
Код:
'NoScreen_0201'
и ваще не копируются скрин он тока создается и все дальше ни каких действий нет(((


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

Короче копируется а удалятся почему то не хочет(


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

Может еще есть какие нить предложении
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Код:
#include <ScreenCapture.au3>
#include <File.au3>
#include <array.au3>
Global $s_Dir = @ScriptDir & '\Screen\'
_MyScreen()
Func _MyScreen()
	Local $s_FileName, $f_Cursor = False, $s_date = StringFormat('%s.%s.%s.%s', @MDAY, @MON, @YEAR)
	If Not FileExists($s_Dir) Then DirCreate($s_Dir)
	$s_FileName = StringFormat('%s.%s.%s.%s %s.%s.%s.jpg', @ComputerName, @MDAY, @MON, @YEAR, @HOUR, @MIN, @SEC)
	_ScreenCapture_Capture($s_Dir & $s_FileName, 0, 0, @DesktopWidth, @DesktopHeight, $f_Cursor)
	$array_shar = _FileListToArray('C:\screen\', '*.jpg', 1)
	For $i = 1 To UBound($array_shar) - 1
		$string_comp = StringInStr($array_shar[$i], 'NoScreen')
		ConsoleWrite($string_comp & @CRLF)
		If Not $string_comp = 0 Then
			FileDelete('C:\screen\' & $array_shar[$i])
			FileCopy($s_Dir & $s_FileName, 'C:\screen\' & $s_date & $s_FileName)
			ExitLoop
		EndIf
	Next
EndFunc

исправил. проверил в данном варианте - работает. в исходной папке ('C:\screen\') пустые файлы NoScreen_1.jpg, NoScreen_2.jpg и так далее
моя вина. ведь функция
Код:
_FileListToArray

возвращает только имя.
 
Автор
T

Timerlan

Новичок
Сообщения
93
Репутация
0
Да все хорошо работает, но есть одно но.... когда он делает скриншот и создает файл то имеет имя ИмяПК_Дату_Время, а когда он копирует то его имя становится Дата_ИмяПК_Дата_Время. Получается он чуть чуть не правильно работает. Мне нужно чтоб он создавал имя ИмяПК_Дата_Время ну это он делает, и получается должен копировать такой же файл с таким же именем, далее мне нужно чтоб он копировал не прямо скажем в диск C:\Screen, а в диск C:\Screen\Дата (Дата это папка которая у меня будет создаваться каждый день, а в ней пустышки jpg файлы те самые которые называются NoScreen, т.е например седня 20 число соотвественно у меня создается папка седня C:\sreen\20.03.2013 а ней уже файлы NoScreen_1.jpg, NoScreen_2.jpg, NoScreen_3.jpg .......NoScreen_60.jpg.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
ну я ж говорил, что только с именами разобраться надо. вот , что работает у меня как надо
Код:
#include <ScreenCapture.au3>
#include <File.au3>
Global $s_Dir = @ScriptDir & '\Screen\'
_MyScreen()
Func _MyScreen()
    Local $s_FileName, $f_Cursor = False, $s_date = StringFormat('%s.%s.%s.%s', @MDAY, @MON, @YEAR)
    If Not FileExists($s_Dir) Then DirCreate($s_Dir)
    $s_FileName = StringFormat('%s.%s.%s.%s %s.%s.%s.jpg', @ComputerName, @MDAY, @MON, @YEAR, @HOUR, @MIN, @SEC)
    _ScreenCapture_Capture($s_Dir & $s_FileName, 0, 0, @DesktopWidth, @DesktopHeight, $f_Cursor)
    $array_shar = _FileListToArray('C:\screen\' & $s_date, '*.jpg', 1)
    For $i = 1 To UBound($array_shar) - 1
        $string_comp = StringInStr($array_shar[$i], 'NoScreen')
        If Not $string_comp = 0 Then
            FileDelete('C:\screen\' & $s_date & '\' & $array_shar[$i])
            FileCopy($s_Dir & '\' & $s_FileName, 'C:\screen\' & $s_date & '\' & $s_FileName)
            ExitLoop
        EndIf
    Next
EndFunc

имена файлов идентичны
покумекай сам. это лишь мелочь. основной механизм ведь работает?
 
Автор
T

Timerlan

Новичок
Сообщения
93
Репутация
0
Все огромное спасибо тебе :laugh: ты мне очень помог :IL_AutoIt_1:
 
Автор
T

Timerlan

Новичок
Сообщения
93
Репутация
0
Ребята с этим скриптом я выявил некоторою проблему
Код:
#NoTrayIcon
#include <ScreenCapture.au3>
#include <File.au3>
Global $iTimeOut = 60000;таймаут в мсек

HotKeySet('{Esc}', '_Exit')
;_MyScreen()
;AdlibRegister('_MyScreen', $iTimeOut)
Global $s_Dir = @ScriptDir & '\Screen\'
While 1
    If @HOUR = '12'And @MIN = '00' And @SEC = '00' Then _MyScreen()
    If @MDAY = '20' And @HOUR = '13' And @MIN = '00' And @SEC = '00' Then
    $array = _FileListToArray($s_Dir,'*.png',1)
    For $i = 1 To UBound($array) -1
        FileDelete($array[$i])
    Next
    EndIf
    Sleep(100)
WEnd

Func _MyScreen()
    Local $s_FileName, $f_Cursor = False, $s_date = StringFormat('%s.%s.%s.%s', @MDAY, @MON, @YEAR)
    If Not FileExists($s_Dir) Then DirCreate($s_Dir)
    $s_FileName = StringFormat('%s.%s.%s.%s %s.%s.%s.jpg', @ComputerName, @MDAY, @MON, @YEAR, @HOUR, @MIN, @SEC)
    _ScreenCapture_Capture($s_Dir & $s_FileName, 0, 0, @DesktopWidth, @DesktopHeight, $f_Cursor)
    $array_shar = _FileListToArray('C:\screen\' & $s_date, '*.jpg', 1)
    For $i = 1 To UBound($array_shar) - 1
        $string_comp = StringInStr($array_shar[$i], 'NoScreen')
        If Not $string_comp = 0 Then
            FileDelete('C:\screen\' & $s_date & '\' & $array_shar[$i])
            FileCopy($s_Dir & '\' & $s_FileName, 'C:\screen\' & $s_date & '\' & $s_FileName)
            ExitLoop
        EndIf
    Next
EndFunc

Короче проблема в чем. Вот у нас есть скрипт который создает пустышки на серваке допустим он их создает в 9 часов утра. А этот скрипт который я показал вам он делает скриншот и копирует его на сервак и заменяет одну пустышку. Так вот суть этого скрипта в том что он должен делать скрин в определенное время которое я указываю в скрипте. А сейчас он мне делает скрин, когда появится на серваке пустышка он делает скриншот и отправляет его на сервак. Если же на серваке нету ваще этих пустышек то он делает как положено в определенное время которое я задал. Воот чет не могу разобратся как нормально привести в работу этот скрипт(((


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

Кто нить может помочь мне....((
 
Верх