Страница 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
Размер фала -
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 "";
}