Войти

Показать полную графическую версию : [решено] автоматическое закрытие и запуск программы.


s.i.p.a
22-08-2018, 16:18
Есть софт Geovision для видеонаблюдения. Оригинальный софт 2006 года был утерян и пришлось ставить тот, который нашёлся в инете и подошёл к плате видеозахвата. Проблема в том, что спустя 2-3 часа работы появляются артефакты на записи и нужно перезагружать программу, что бы всё стало на свои места. По этому решил написать скрипт, но остался один нюанс. Ниже скрипт:

@echo on
set executable=C:\GV800_7.05\GV800.EXE
set process=GV800.EXE

:begin
taskkill /F /IM "%process%"
timeout /t 10 /nobreak >nul

tasklist |>nul findstr /b /l /i /c:%process% || start "" "%executable%"
timeout /t 7200 /nobreak >nul
goto :begin

Нюанс в том, что бы программа начала запись нужно нажать сначала кнопку вход (в виде ключа), затем кнопку Вход Пользователем, либо же окно программы должно быть просто выбрано и нажать кнопку L.
Картинка: https://ibb.co/dVQ7He

Помогите добить.

p.s. Скрипт последняя надежда. 2 недели техподдержка Geovision юлит и не даёт толковые ответы.

s.i.p.a
23-08-2018, 11:57
В общем порылся в инете и решил сделать с помощью утилиты nircmdc. Вот что получилось:

@echo off
set executable=C:\GV800_7.05\GV800.EXE
set process=GV800.EXE

:begin
taskkill /F /IM "%process%"
timeout /t 10 /nobreak >nul

tasklist |>nul findstr /b /l /i /c:%process% || start "" "%executable%"
timeout /t 120 /nobreak >nul
nircmdc win settopmost process "GV800.EXE" 1
nircmdc win focus process "GV800.EXE"
nircmdc win activate process "GV800.EXE"
timeout /t 2 /nobreak >nul
nircmdc sendkey L press
timeout /t 7200 /nobreak >nul
goto :begin

Пока потестирую, посмотрим как будет работать

s.i.p.a
23-08-2018, 17:49
Не всё хорошо отрабатывает. Почему-то строчка nircmdc sendkey L press » срабатывает, но клавиша не нажимается.

s.i.p.a
27-08-2018, 12:00
Называется сам с собой поговорил, но может кому-то пригодиться в будущем.

2 способа решения у меня получилось:

1) Используем планировщик задач вместо цикла, и запускаем скрипт каждые 2 часа

@echo off
set executable=C:\GV800_7.05\GV800.EXE
set process=GV800.EXE

taskkill /F /IM "%process%"
timeout /t 10 /nobreak >nul

tasklist |>nul findstr /b /l /i /c:%process% || start "" "%executable%"
timeout /t 120 /nobreak >nul
nircmdc win settopmost process "GV800.EXE" 1
nircmdc win focus process "GV800.EXE"
nircmdc win activate process "GV800.EXE"
timeout /t 2 /nobreak >nul
nircmdc sendkey L press
exit

2) Используем ещё одну утилиту cmdow.exe (ссылка (https://ritchielawrence.github.io/cmdow/))
Сначала с помощью команды cmdow.exe /F узнаём имя нужного нам окна. Дальше записываем в наш скрипт полученную инфу:

@echo off
set executable=C:\GV800_7.05\GV800.EXE
set process=GV800.EXE
:begin
taskkill /F /IM "%process%"
timeout /t 10 /nobreak >nul

tasklist |>nul findstr /b /l /i /c:%process% || start "" "%executable%"
timeout /t 120 /nobreak >nul
cmdow.exe GV800 /ACT
timeout /t 2 /nobreak >nul
nircmdc sendkey L press
timeout /t 7200 /nobreak >nul
goto :begin

Как-то так.




© OSzone.net 2001-2012