Страница 1 из 1

Как в цикле записывать скриншоты окна или экрана (Windows)

Добавлено: Пн мар 30, 2020 2:00 pm
zevplus
Всем доброго времени суток!

Задача - из под Majordomo, в цикле записывать скриншоты Windows окна или экрана.

Как вариант рассматриваю возможность из под Majordomo в цикле вызвать "boxcutter-fs is a minimal Windows command line screenshot
application".

Цикл сформирован и работает.

Как вызвать на выполнение это Windows application?

Заранее спасибо!

P.S.

В имя файла записываемого скрина нужно добавить счетчик из цикла.

Евгений.

Re: Как в цикле записывать скриншоты окна или экрана (Windows)

Добавлено: Пн мар 30, 2020 2:27 pm
tarasfrompir
zevplus писал(а):
Пн мар 30, 2020 2:00 pm
Всем доброго времени суток!

Задача - из под Majordomo, в цикле записывать скриншоты Windows окна или экрана.

Как вариант рассматриваю возможность из под Majordomo в цикле вызвать "boxcutter-fs is a minimal Windows command line screenshot
application".

Цикл сформирован и работает.

Как вызвать на выполнение это Windows application?

Заранее спасибо!

P.S.

В имя файла записываемого скрина нужно добавить счетчик из цикла.

Евгений.
safe_exec - смотри бз мажордомо

Re: Как в цикле записывать скриншоты окна или экрана (Windows)

Добавлено: Пн мар 30, 2020 4:32 pm
xor
zevplus писал(а):Всем доброго времени суток!

Задача - из под Majordomo, в цикле записывать скриншоты Windows окна или экрана.

Как вариант рассматриваю возможность из под Majordomo в цикле вызвать "boxcutter-fs is a minimal Windows command line screenshot
application".

Цикл сформирован и работает.

Как вызвать на выполнение это Windows application?

Заранее спасибо!

P.S.

В имя файла записываемого скрина нужно добавить счетчик из цикла.

Евгений.
В составе пакета прог под Винду для МДМ идёт ниркоммандер, который может, в тч, и скиншоты

Отправлено с моего Redmi 4X через Tapatalk


Re: Как в цикле записывать скриншоты окна или экрана (Windows)

Добавлено: Пн мар 30, 2020 5:26 pm
zevplus
Коллеги!

Всем спасибо!

отдельное спасибо за оперативность!

Решение:

Код: Выделить всё

safe_exec('E:\Program_Files\boxcutter-1.5\boxcutter-fs.exe E:\Program_Files\boxcutter-1.5\img\SS'.time().'('.(String)$i.').bmp');
где $i - счетчик цикла

Евгений!

Re: Как в цикле записывать скриншоты окна или экрана (Windows)

Добавлено: Ср апр 01, 2020 10:18 am
zevplus
Всем доброго времени суток!

Задача развивается - теперь нужно определить, что если экран черный (пустой), то остановить цикл.

Вижу простое решение - анализировать размер записанного скриншота. Если меньше, допустим, 30 Kb, то сделать еще парочку скриншотов для убедительности и если сумма размеров трех файлов будет меньше 90 Kb, то цикл остановить (и послать весточку инженеру).

В связи с этим вопрос: как средствами MJD узнать размер файла? (Куда копать?)

Нашел, что есть команда для командной строки Windows: for %I in (file.ext) do echo %~zI

т.е. теоретически, можно сделать

Код: Выделить всё

safe_exec('for %I in (file.ext) do echo %~zI');


Как этот результат привязать к переменной?

Возможно, есть более элегантное решение.

Заранее спасибо!

Евгений

Re: Как в цикле записывать скриншоты окна или экрана (Windows)

Добавлено: Ср апр 01, 2020 10:37 am
tarasfrompir
zevplus писал(а):
Ср апр 01, 2020 10:18 am
Всем доброго времени суток!

Задача развивается - теперь нужно определить, что если экран черный (пустой), то остановить цикл.

Вижу простое решение - анализировать размер записанного скриншота. Если меньше, допустим, 30 Kb, то сделать еще парочку скриншотов для убедительности и если сумма размеров трех файлов будет меньше 90 Kb, то цикл остановить (и послать весточку инженеру).

В связи с этим вопрос: как средствами MJD узнать размер файла? (Куда копать?)

Нашел, что есть команда для командной строки Windows: for %I in (file.ext) do echo %~zI

т.е. теоретически, можно сделать

Код: Выделить всё

safe_exec('for %I in (file.ext) do echo %~zI');


Как этот результат привязать к переменной?

Возможно, есть более элегантное решение.

Заранее спасибо!

Евгений
Тут надо средства ПХП тебе изучать
Цикл - https://www.php.net/manual/ru/control-s ... es.for.php

Код: Выделить всё

for ($i = 1; $i <= 10; $i++) {
    echo $i;
}
Размер фала - https://www.php.net/manual/ru/function.filesize.php

Код: Выделить всё

// Пример вывода: Размер файла somefile.txt: 1024 байтов

$filename = 'somefile.txt';
echo 'Размер файла ' . $filename . ': ' . filesize($filename) . ' байтов';
Условие - https://www.php.net/manual/ru/control-structures.if.php

Код: Выделить всё

<?php
if ($a > $b) {
  echo "a больше b";
  $b = $a;
}
?>
Ну вроде все - остальное найдеш там же
И пожалуйста прежде чем чтото делать подумайте - на чем у вас МД написан (язык) и соответственно на таком языке и делайте

Re: Как в цикле записывать скриншоты окна или экрана (Windows)

Добавлено: Ср апр 01, 2020 10:43 am
zevplus
Спасибо!

Буду копать...

Я не программист, я только учусь (на реальных примерах)!

Евгений.

Re: Как в цикле записывать скриншоты окна или экрана (Windows)

Добавлено: Ср апр 01, 2020 10:56 am
tarasfrompir
zevplus писал(а):
Ср апр 01, 2020 10:43 am
Спасибо!

Буду копать...

Я не программист, я только учусь (на реальных примерах)!

Евгений.
Сам такой - но уже продвигаюсь вперед

Re: Как в цикле записывать скриншоты окна или экрана (Windows)

Добавлено: Пт апр 03, 2020 11:58 am
zevplus
Коллеги!

Всем спасибо!

Все получилось!

Кусочек кода для памяти (в реальности он больше и другой)...

Код: Выделить всё

$filename1 = "E:\TEST\PS1.png";
$filename2 = "E:\TEST\PS2.png";
$filename3 = "E:\TEST\PS3.png";

$filesize = filesize("E:\TEST\PS1.png");
$filesize += filesize("E:\TEST\PS2.png");
$filesize += filesize("E:\TEST\PS3.png");

If ($filesize > 100000) {

file_get_contents("http://192.168.11.214/sec/?pt=10&ir=00FDD22D&irp0=9000&irp1=4500&irp2=560&irp3=1600&irp4=560");

$TakeSS = 'E:\Program_Files\OBSCommand_1.5.2\OBSCommand\OBSCommand.exe /command=TakeSourceScreenshot,sourceName=Scene3,PictureFormat=png,saveToFilePath=';

$var1 = $TakeSS.$filename1; 
$var2 = $TakeSS.$filename2; 
$var3 = $TakeSS.$filename3; 

setTimeout("Timer_01","safe_exec('$var1');",5);
setTimeout("Timer_02","safe_exec('$var2');",10);
setTimeout("Timer_03","safe_exec('$var3');",15);

SetTimeOut("Timer_04,"callMethod('IR_Sender_10.TEST_Ch_UP');",20);

} else {
sg('IR_Sender_10.Counter', 0);
return "";
}