Показать полную графическую версию : CMD/BAT - [решено] Скрипт для авто выключения одного приложения при ручном выключении
vk_k14m@vk
17-12-2018, 23:29
Однажды я уже задавал подобный вопрос (http://forum.oszone.net/thread-335159.html), но нужного ответа тогда я так и не получил. Так что это моя вторая попытка.
Есть некая игра, назовем её MTA Province. И приложение для записи видео с экрана - Bandicam. Нужно создать скрипт, при запуске которого сначала должна запускаться игра, а потом через секунд 5 - приложение для записи видео. Приложение нужно просто запустить, авто запись в нём включается сама. Но это ещё не весь скрипт. Нужно что б скрипт всё ещё оставался активен и всё время отслеживал (желательно в свёрнутом виде), запущена ли игра или нет. И в случает выключения игры, скрипт должен так же выключить и программу для записи видео. Ну и сам скрипт после этого со спокойной душей тоже должен закрыться.
Думаю цель ясна. Запускаю игру - начинается запись видео. Выключаю игру - запись прекращается.
НО. Приложение для запуска игры, запускает иной процесс, и к тому же не один (Смотреть вложение).
Да и Bandicam, запускается одним приложением, но запускает другой процесс (Смотреть второе вложение).
И вот я не соображаю как написать этот скрипт. Надеюсь на понимает, и помощь от знающих людей. Информации НА ЭТОТ РАЗ я надеюсь дал достаточно...
Покажите то же самое, только скриншотами Process Explorer'а. Уточните, какие именно исполняемые файлы Вы запускаете для игры и для записи видео. Запишите видео, на котором покажите, как Вы делаете описанные выше действия вручную.
vk_k14m@vk
18-12-2018, 00:00
Записать видео процесса запуска записи видео. Хм... Думаю тут нужна вторая прога для записи видео. Сейчас что-то соображу...
vk_k14m@vk
18-12-2018, 00:06
А скриншот вот
Покажите свойства того, чем Вы запускаете процессы «Multi Theft Auto.exe» и «bdcam.exe» (например, свойства ярлыков). Конкретно интересуют полный путь к исполняемому файлу, рабочий каталог, требуется ли запуск с административными привилегиями, передаваемые параметры и т.п.
vk_k14m@vk
18-12-2018, 00:31
Исполняемые файлы:
"D:\Games\MTA Province\MTA\Multi Theft Auto.exe"
https://i.ibb.co/n3ffwZH/image.png (https://imgbb.com/)
"C:\Program Files (x86)\Bandicam\Loader.exe"
https://i.ibb.co/3Rc8vFp/image.png (https://imgbb.com/)
В свойствах ярлыков галочка "Запуск от имени администратора" нигде не стоит.
Видео (https://youtu.be/L7lj7YG2zWk)
vk_k14m@vk, за мельтешением картинок на Вашем Рабочем столе ничего разглядеть невозможно, ни где Вы возите мышкой, ни где что нажимаете. И большой баннер над панелью задач этому тоже не помогает.
Можете пробовать. На WSH:
Option Explicit
Const strPath2GameProcess = "D:\Games\MTA Province\MTA\Multi Theft Auto.exe"
Const strPath2VideoRecordingProcess = "C:\Program Files (x86)\Bandicam\Loader.exe"
Const strName4StopProcess = "bdcam64.bin"
Dim objSWbemServicesEx
Dim objSWbemObjectEx
Dim objFSO
Dim lngGameProcessID
Dim lngVideoRecordingProcessID
Dim lngVideoRecordingParentProcessID
Set objSWbemServicesEx = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
Set objSWbemObjectEx = objSWbemServicesEx.Get("Win32_Process")
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(strPath2GameProcess) Then
If objFSO.FileExists(strPath2GameProcess) Then
If objSWbemObjectEx.Create(strPath2GameProcess, objFSO.GetParentFolderName(strPath2GameProcess), Nothing, lngGameProcessID) = 0 Then
WScript.Sleep 5 * 1000
If objSWbemObjectEx.Create(strPath2VideoRecordingProcess, objFSO.GetParentFolderName(strPath2VideoRecordingProcess), Nothing, lngVideoRecordingProcessID) = 0 Then
objSWbemServicesEx.ExecNotificationQuery( _
"SELECT * FROM __InstanceDeletionEvent WITHIN 1 " & _
"WHERE TargetInstance ISA 'Win32_Process' AND " & _
"TargetInstance.ProcessID = " & CStr(lngGameProcessID) & "" _
).NextEvent
For Each objSWbemObjectEx In objSWbemServicesEx.ExecQuery( _
"SELECT * FROM Win32_Process WHERE Name = '" & strName4StopProcess & "'" _
)
lngVideoRecordingParentProcessID = objSWbemObjectEx.ParentProcessID
If objSWbemObjectEx.Terminate() = 0 Then
If objSWbemServicesEx.Get("Win32_Process.Handle=" & CStr(lngVideoRecordingParentProcessID)).Terminate() = 0 Then
Else
WScript.Echo "Can't terminate process with PID [" & CStr(lngVideoRecordingParentProcessID) & "]."
End If
Else
WScript.Echo "Can't terminate process with PID [" & CStr(objSWbemObjectEx.ProcessID) & "]."
End If
Exit For
Next
Else
WScript.Echo "Can't execute process [" & strPath2VideoRecordingProcess & "]."
WScript.Quit 4
End If
Else
WScript.Echo "Can't execute process [" & strPath2GameProcess & "]."
WScript.Quit 3
End If
Else
WScript.Echo "Can't find file [" & strPath2VideoRecordingProcess & "]."
WScript.Quit 1
End If
Else
WScript.Echo "Can't find file [" & strPath2GameProcess & "]."
WScript.Quit 1
End If
Set objFSO = Nothing
Set objSWbemObjectEx = Nothing
Set objSWbemServicesEx = Nothing
WScript.Quit 0
Запускаете скрипт, ждёте запуска игры, ждёте пять секунд, нажимаете F12 (или иную горячую клавишу, какая там у Вас настроена) для начала записи видео. Закончили — нажали F12 для остановки записи видео, затем только закрыли игру.
vk_k14m@vk
18-12-2018, 02:51
Запускаете скрипт, ждёте запуска игры, ждёте пять секунд, нажимаете F12 (или иную горячую клавишу, какая там у Вас настроена) для начала записи видео. Закончили — нажали F12 для остановки записи видео, затем только закрыли игру. »
С F12 не понял, зачем мне ее нажимать?
vk_k14m@vk
18-12-2018, 03:08
за мельтешением картинок на Вашем Рабочем столе ничего разглядеть невозможно, ни где Вы возите мышкой, ни где что нажимаете. И большой баннер над панелью задач этому тоже не помогает. »
А что там разглядывать? Два раза кликнул на ярлык "MTA Province". Дождался запуска игры. Свернул игру. Два раза нажал на ярлык "Bandicam" (запись началась). Развернул игру. Вышел из игры. Открыл скрытые значки трея. Кликнул на "Bandicam", остановил запись и закрыл приложение. Хотя последние действия были не обязательны. Bandicam записывает видео сразу в *.mp4
Никакие дополнительные действия вроде перекодирования, остановки и сохранения записи не нужны. Если принудительно закрыть программу видео так же не повредится.
Можете пробовать. На WSH: »
А как "собрать" этот скрипт, что б не было такой ошибки
https://i.ibb.co/Pcc68bB/image.png (https://imgbb.com/)
И еще вопрос на будущее. Если я захочу сделать подобный скрипт, но для какой-то другой игры. Мне просто изменить путь в этой строчке
Const strPath2GameProcess = "D:\Games\MTA Province\MTA\Multi Theft Auto.exe"
на путь к другой запускаемой игре? Или еще что-то переписывать нужно?
С F12 не понял, зачем мне ее нажимать? »
Для начала и остановки процесса захвата видео.
(запись началась). »
Покажите Ваши настройки приложения, которые отвечают за автоматический старт записи.
Хотя последние действия были не обязательны. »
Обязательны. Иначе будет у Вас оборванное видео. Особенно, когда речь идёт об mpeg.
Если принудительно закрыть программу видео так же не повредится. »
Есть большие сомнения на этот счёт.
А как "собрать" этот скрипт, что б не было такой ошибки »
Сохранять в файл с расширением .vbs, а не .wsh (.wsh — файл параметров для сценария скрипта).
И еще вопрос на будущее. Если я захочу сделать подобный скрипт, но для какой-то другой игры. Мне просто изменить путь в этой строчке »
Теоретически — да. Практически же — этого гарантировать нельзя.
vk_k14m@vk
18-12-2018, 05:45
Покажите Ваши настройки приложения, которые отвечают за автоматический старт записи. »
https://i.ibb.co/FBLY2Hx/image.png (https://imgbb.com/)
Обязательны. Иначе будет у Вас оборванное видео. Особенно, когда речь идёт об mpeg. »
Неоднократно во время записи видео обрывались. То свет гас, то комп перезапускался. Но после этого никаких проблем с видео не было.
Есть большие сомнения на этот счёт. »
Как видно из видео (https://youtu.be/0zooDy_SGd8), все работает. Я не делал с видео никаких дополнительных манипуляций. Просто записал как есть и загрузил.
Сохранять в файл с расширением .vbs, а не .wsh (.wsh — файл параметров для сценария скрипта). »
Теперь другая ошибка. Сразу после запуска скрипта.
https://i.ibb.co/G0RDBcT/image.png (https://imgbb.com/)
Теоретически — да. Практически же — этого гарантировать нельзя. »
В таком случае снова обращусь на форум)
Скрипт по какой-то причине не может запустить на исполнение файл "C:\Program Files (x86)\Bandicam\Loader.exe" :).
vk_k14m@vk
18-12-2018, 07:26
Скрипт по какой-то причине не может запустить на исполнение файл "C:\Program Files (x86)\Bandicam\Loader.exe" . »
Понял ошибку. Bandicam все таки нужны права администратора =_=
Bandicam все таки нужны права администратора =_= »
Ну, фигурный щит в правом нижнем углу значка ярлыка как бы намекает об этом ;). Можно запускать скрипт с административными привилегиями (ярлык на wscript.exe, аргументом к нему — путь к скрипту), тогда всё запущенное из-под него также получит административные привилегии.
vk_k14m@vk
18-12-2018, 17:58
Такс. С запуском сейчас все в порядке. А вот с завершением процесса проблемы. После выключения игры ни "bdcam64.bin", ни "bdcam.exe" не завершается. К тому же, если вручную завершить процесс "bdcam64.bin" то запись не прекращается, и идет дальше. Нужно именно "bdcam.exe" выключать. Заменил в скрипте "bdcam64.bin" на "bdcam.exe", и ничего не изменилось. Скрипт не может, или не хочет завершать этот процесс. Да и процесс самого скрипта не завершается. И если много раз его запускать, то он дублируется.
https://i.ibb.co/JtpS1Bc/image.png (https://ibb.co/F3Ydrxh)
vk_k14m@vk, я уже написал Вам, что нужно сделать:
Можно запускать скрипт с административными привилегиями (ярлык на wscript.exe, аргументом к нему — путь к скрипту), тогда всё запущенное из-под него также получит административные привилегии. »
Нужно именно "bdcam.exe" выключать. »
Вы дерево процессов видели? Это:https://i.imgur.com/L4rWw4P.pngприведённый Вами скриншот, если что. Завершать нужно и одно приложение, и другое. Сначала ищется и завершается процесс bdcam64.bin, затем, уже напрямую, завершается его родительский процесс, коим является bdcam.exe.
Заменил в скрипте "bdcam64.bin" на "bdcam.exe", и ничего не изменилось. »
Зачем? Метод научного тыка здесь не работает.
После выключения игры ни "bdcam64.bin", ни "bdcam.exe" не завершается. »
Раз не завершается, и нет никаких сообщений — значит, до попыток завершения дело даже не доходит. Покажите скриншот окна Process Explorer'а после: «после выключения игры».
Да и процесс самого скрипта не завершается.»
Естественно.
И если много раз его запускать, то он дублируется. »
Естественно.
vk_k14m@vk
18-12-2018, 18:25
Раз не завершается, и нет никаких сообщений — значит, до попыток завершения дело даже не доходит. Покажите скриншот окна Process Explorer'а после: «после выключения игры». »
https://i.ibb.co/th7ZGLc/image.png (https://ibb.co/hMPX6YH)
vk_k14m@vk, «огласите весь список, пожалуйста»™.
vk_k14m@vk
19-12-2018, 00:51
«огласите весь список, пожалуйста»™. »
https://i.ibb.co/6FrN1tB/1.jpg (https://ibb.co/XtjV358)
https://i.ibb.co/FnmrRb2/2.jpg (https://ibb.co/wYBk5NV)
https://i.ibb.co/5YscJV8/3.jpg (https://ibb.co/28cKpBt)
https://i.ibb.co/qmCssMs/4.jpg (https://ibb.co/WB0yyWy)
https://i.ibb.co/4VdF8cq/5.jpg (https://ibb.co/NySF9Xv)
https://i.ibb.co/dc3YXsc/6.jpg (https://ibb.co/0XWb1pX)
vk_k14m@vk, как-то странно у Вас некоторые вещи выглядят.
А так особо идей нет. Могу лишь констатировать, что у меня всё работает, как было заказано (за исключением того факта, что, если делать захват видео на полном экране, и Bandicam принудительно снимать, то файл видео оказывается запоротым).
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.