Что нового

[Автоматизация] Автоматизация сохранения скриншотов с видео

Aquila

Новичок
Сообщения
5
Репутация
0
Помогите со скриптиком:

Код:
WinWaitActive("1.mkv")
Send("i")
WinWaitActive("Сохранение", "Со&хранить")
Send("{ENTER}")
Sleep(2000)
Send("{RIGHT}")
Send("i")
WinWaitActive("Сохранение", "Со&хранить")
Send("{ENTER}")
Sleep(2000)
Send("{RIGHT}")
Send("i")
WinWaitActive("Сохранение", "Со&хранить")
Send("{ENTER}")


Скрипт нужен для сохранения скриншотов с каждого кадра видео в программе MPC-HC. Так проще гифки делать ;)

Нужно зациклить вот эти строчки:

Код:
Sleep(2000)
Send("{RIGHT}")
Send("i")
WinWaitActive("Сохранение", "Со&хранить")
Send("{ENTER}")


чтобы не писать их много раз. Было бы хорошо прописывать желаемое количество.

Ещё мне интересно узнать, как сделать так, чтобы скриншоты сохранялись с именами: 1.png, 2.png, 3.png и т.д., то есть по счёту. Сейчас им даётся название с датой и временем до секунд, поэтому добавил команду Sleep, чтобы файл не пытался сохранится с одним именем.
В этом деле я новичок, так что не судите строго и пожалуйста, помогите :smile:
 
Автор
A

Aquila

Новичок
Сообщения
5
Репутация
0
Alofa
Спасибо. Программа хорошая, но для моих целей не применима. Мне скрипт нужен, а не программки всякие :whistle:


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

Получилось сделать, что хотел:

Код:
WinWaitActive("1.mkv")
$i = 0
While $i <= 2
Send("i")
WinWaitActive("Сохранение", "Со&хранить")
Send($i)
Send("{ENTER}")
Send("{RIGHT}")
$i = $i + 1
WEnd
 
A

Alofa

Гость
Ну тогда уж так:
Код:
Global $sWindows = '[CLASS:MediaPlayerClassicW]'		; Идентификатор основного окна плеера
Global $sWinSave = '[CLASS:#32770;TITLE:Сохран]'		  ; Идентификатор окна Сохранения
Global $sControlEdit = '[CLASS:Edit; INSTANCE:1]'		; Идентификатор поля "Имя файла" окна Сохранения
Global $sControlCombo = '[CLASS:ComboBox; INSTANCE:2]'	; Идентификатор поля "Тип файла" окна Сохранения
Global $sControlButton_1 = '[CLASS:Button; ID:1]'		; Идентификатор Кнопки "Сохранить" окна Сохранения
Global $sControlButton_2 = '[CLASS:Button; ID:2]'		; Идентификатор Кнопки "Отмена" окна Сохранения

Global $iTrigger, $hWndSave
Global $iFormat = 2 ; Формат сохранения (0 = bmp, 1 = jpg, 2 = png)

HotKeySet('{F1}', '_Start')
HotKeySet('{ESC}', '_Stop')

While 1
	If Not $iTrigger Then $iTrigger = 1
	Sleep(200)
WEnd

Func _Start()
	Local $i = 0
	$hWnd = WinWait($sWindows, '', 3)
	If Not $hWnd Then
		MsgBox(16, 'Ошибка', 'Окно не найдено!')
		Return
	EndIf
	While $iTrigger
		$i += 1
		WinActivate($hWnd)
		ControlSend($hWnd, '', '', '!i')
		$hWndSave = WinWait($sWinSave, '', 5)
		If Not $hWndSave Then ContinueLoop
		WinSetState($hWndSave, '', @SW_HIDE)
		ControlSetText($hWndSave, '', $sControlEdit, $i)
		If $i = 1 Then ControlCommand($hWndSave, '', $sControlCombo, 'SetCurrentSelection', $iFormat)
		ControlClick($hWndSave, '', $sControlButton_1)
		Sleep(50)
		ControlSend($hWnd, '', '', '^{RIGHT}')
	WEnd
EndFunc   ;==>_Start

Func _Stop()
	If WinExists($hWndSave) Then ControlClick($hWndSave, '', $sControlButton_2)
	Switch MsgBox(32 + 4, 'Вопрос:', 'Вы желаете продолжить работу с программой?')
		Case 6
			$iTrigger = 0
		Case 7
			Exit
	EndSwitch
EndFunc   ;==>_Stop
Только вы здесь не сможете задать путь сохранения файлов.

P.s: Тестировал на Этой версии.
 

ra4o

AutoIT Гуру
Сообщения
1,162
Репутация
242
чтобы не писать их много раз
Запускайте эти строки в цикле
Код:
For $i=1 to 3 ; Здесь количество повторов
  Sleep(2000)
  Send("{RIGHT}")
  Send("i")
  WinWaitActive("Сохранение", "Со&хранить")
  Send("{ENTER}")
Next

сделать так, чтобы скриншоты сохранялись с именами
Смотрите в какой момент Ваша программа запрашивает имя сохраняемого скриншота и в цикле изменяйте на
Код:
...........
   WinWaitActive("Сохранение", "Со&хранить"); Скорее всего после этой строки вставить

   Send($i&'.png')
..........
 
Автор
A

Aquila

Новичок
Сообщения
5
Репутация
0
ra4o
Спасибо. Хороший вариант. Получаем это:

Код:
WinWaitActive("1.mkv")
For $i=1 to 3
Send("i")
WinWaitActive("Сохранение", "Со&хранить")
Send($i&'.png')
Send("{ENTER}")
Send("{RIGHT}")
Next


Alofa
Ваш скрипт я не понял и он не заработал.
 

InnI

AutoIT Гуру
Сообщения
4,555
Репутация
1,257
Aquila
Код:
#include <ScreenCapture.au3>

$hCtrl = ControlGetHandle("[class:MediaPlayerClassicW]", "", "[regexpclass:Afx:]")
For $i = 1 To 3
  _ScreenCapture_CaptureWnd(@ScriptDir & "\" & $i & ".png", $hCtrl)
  ControlSend("[class:MediaPlayerClassicW]", "", $hCtrl, "{right}")
  Sleep(100)
Next
 
A

Alofa

Гость
Aquila сказал(а):
... он не заработал.
Код:
; ...
HotKeySet('{F1}', '_Start') ; -> Кнопка "F1" - начинаем делать скриншоты
HotKeySet('{ESC}', '_Stop') ; -> Кнопка "Escape" - прекращаем скринить или завершаем скрипт.
; ...
 
Автор
A

Aquila

Новичок
Сообщения
5
Репутация
0
InnI
Не, скриншот экрана мне не нужен :smile:

Alofa
Переустановил программу с удалением всех настроек. Доходит до сюда и всё.
 

Вложения

  • 12.png
    12.png
    73.5 КБ · Просмотры: 18
A

Alofa

Гость
Обновил Ответ #3.

И еще:
Alofa сказал(а):
Код:
Global $sWindows = '[CLASS:MediaPlayerClassicW]'		; Идентификатор основного окна плеера
Global $sWinSave = '[CLASS:#32770;TITLE:Сохран]'		  ; Идентификатор окна Сохранения
Global $sControlEdit = '[CLASS:Edit; INSTANCE:1]'		; Идентификатор поля "Имя файла" окна Сохранения
Global $sControlCombo = '[CLASS:ComboBox; INSTANCE:2]'	; Идентификатор поля "Тип файла" окна Сохранения
Global $sControlButton_1 = '[CLASS:Button; ID:1]'		; Идентификатор Кнопки "Сохранить" окна Сохранения
Global $sControlButton_2 = '[CLASS:Button; ID:2]'		; Идентификатор Кнопки "Отмена" окна Сохранения
; ...
Для правильной идентификации окон вашей версии программы и их элементов используйте утилиту AutoIt Window Info или Control Viewer.
 
Автор
A

Aquila

Новичок
Сообщения
5
Репутация
0
Alofa
Огромное спасибо. Так в сто раз удобнее :IL_AutoIt_1:
 
Верх