Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] автоматическое закрытие и запуск программы. (http://forum.oszone.net/showthread.php?t=336339)

s.i.p.a 22-08-2018 16:18 2827973

автоматическое закрытие и запуск программы.
 
Есть софт 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 2828122

В общем порылся в инете и решил сделать с помощью утилиты 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 2828164

Не всё хорошо отрабатывает. Почему-то строчка
Цитата:

Цитата s.i.p.a
nircmdc sendkey L press »

срабатывает, но клавиша не нажимается.

s.i.p.a 27-08-2018 12:00 2828772

Называется сам с собой поговорил, но может кому-то пригодиться в будущем.

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 (ссылка)
Сначала с помощью команды 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

Как-то так.


Время: 23:10.

Время: 23:10.
© OSzone.net 2001-