Показать полную графическую версию : [решено] Остановка программы
idenchik1488@vk
02-08-2017, 11:46
Нужно что-бы при появлении определённого процесса программа останавливалась, а если процесс пропадёт-запускалась
определённого процесса »
Имя процесса?
программа »
Имя программы?
останавливалась »
Завершалась?
idenchik1488@vk
02-08-2017, 13:48
Имя процесса? »
process.exe
Имя программы? »
taskmgr.exe
Завершалась? »
Да
Процесс:
process.exe »
— может быть запущен более чем в одном экземпляре?
idenchik1488@vk
02-08-2017, 14:49
— может быть запущен более чем в одном экземпляре? »
Нет, только в 1
вот отдельно
@echo off
set "p=calc.exe"
:: Появился процесс - прибить его (или не его) и закрытся
cmd/c for /l %%i in () do @tasklist /fi "imagename eq %p%"^|findstr/v :^&^& (taskkill /f /im "%p%"^& exit/b)^&^>nul timeout /t 1 /nobreak
:: Пропал процесс - выполнить команду и закрытся
cmd/c for /l %%i in () do @tasklist /fi "imagename eq %p%"^|findstr/v :^|^| (echo Команда^& exit/b)^&^>nul ping -n 2 127.0.0.1
idenchik1488@vk, с учётом изложенного Вами примерно так (WSH, VBScript):
Option Explicit
Dim strProcess4Waiting
Dim strProcess4Running
Dim objSWbemServicesEx
Dim objSWbemObjectEx
Dim lngProcessID
strProcess4Waiting = "calc.exe"
strProcess4Running = "taskmgr.exe"
Set objSWbemServicesEx = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
Do
With objSWbemServicesEx.ExecNotificationQuery("SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name = '" & strProcess4Waiting & "'")
With .NextEvent.TargetInstance
WScript.Echo "Detect starting process [" & .Name & "], PID: [" & .ProcessID & "]."
For Each objSWbemObjectEx In objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Process WHERE Name = '" & strProcess4Running & "'")
If objSWbemObjectEx.Terminate() = 0 Then
WScript.Echo "Process [" & objSWbemObjectEx.Name & "], PID: [" & objSWbemObjectEx.ProcessID & "] terminated successfully."
Else
WScript.Echo "Process [" & objSWbemObjectEx.Name & "], PID: [" & objSWbemObjectEx.ProcessID & "] terminate failure."
End If
Next
With objSWbemServicesEx.ExecNotificationQuery("SELECT * FROM __InstanceDeletionEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Handle = '" & .ProcessID & "'")
With .NextEvent.TargetInstance
WScript.Echo "Detect finishing process [" & .Name & "], PID: [" & .ProcessID & "]."
If objSWbemServicesEx.Get("Win32_Process").Create(strProcess4Running, Null, Null, lngProcessID) = 0 Then
WScript.Echo "Process [" & strProcess4Running & "], PID: [" & lngProcessID & "] started successfully."
Else
WScript.Echo "Process [" & strProcess4Running & "] start failure."
End If
End With
End With
End With
End With
Loop
Set objSWbemServicesEx = Nothing
WScript.Quit 0
В роли «process.exe» в примере выступает Калькулятор. Запускать скрипт посредством cscript.exe.
мне этот скрипт очен понравился но можно ли поменять путь C:\Windows\System32\calc.exe на другое например C:\Windows\calc.exe и как это сделать ?
Raymans, где Вы собираетесь «поменять путь», если последний нигде в скрипте не используется?
не совсем понял тоесть поменять путь не возможно что ли?
не совсем понял »
Вы пишете:
можно ли поменять путь C:\Windows\System32\calc.exe на другое »
В коде (http://forum.oszone.net/post-2756269.html#post2756269) вообще не используется путь. Как Вы собираетесь менять то, чего нет?! Поясните.
ааа вот теперь понятно .просто если я по этому пути писаю программу например C:\Windows\System32\Progexe у меня всё работает а в другом например рабочий стол нет я подумал что прописан путь к C:\Windows\System32 .а вообще можно ли укать путь C:\Windows или ещё какой ?сама идея понравилась .
[Iska аккуратно бьётся головой апстену]
Ткните пальцем в код, где Вы хотите указать путь. Я вижу лишь одно место — метод «.Create()» (не проверялось):
Option Explicit
Dim strProcess4Waiting
Dim strProcess4Running
Dim strPath2Process4Running
Dim objSWbemServicesEx
Dim objSWbemObjectEx
Dim lngProcessID
strProcess4Waiting = "calc.exe"
strProcess4Running = "taskmgr.exe"
strPath2Process4Running = "c:\Мой любимый путь"
Set objSWbemServicesEx = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
Do
With objSWbemServicesEx.ExecNotificationQuery("SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name = '" & strProcess4Waiting & "'")
With .NextEvent.TargetInstance
WScript.Echo "Detect starting process [" & .Name & "], PID: [" & .ProcessID & "]."
For Each objSWbemObjectEx In objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Process WHERE Name = '" & strProcess4Running & "'")
If objSWbemObjectEx.Terminate() = 0 Then
WScript.Echo "Process [" & objSWbemObjectEx.Name & "], PID: [" & objSWbemObjectEx.ProcessID & "] terminated successfully."
Else
WScript.Echo "Process [" & objSWbemObjectEx.Name & "], PID: [" & objSWbemObjectEx.ProcessID & "] terminate failure."
End If
Next
With objSWbemServicesEx.ExecNotificationQuery("SELECT * FROM __InstanceDeletionEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Handle = '" & .ProcessID & "'")
With .NextEvent.TargetInstance
WScript.Echo "Detect finishing process [" & .Name & "], PID: [" & .ProcessID & "]."
If objSWbemServicesEx.Get("Win32_Process").Create(strPath2Process4Running & "\" & strProcess4Running, strPath2Process4Running, Null, lngProcessID) = 0 Then
WScript.Echo "Process [" & strProcess4Running & "], PID: [" & lngProcessID & "] started successfully."
Else
WScript.Echo "Process [" & strProcess4Running & "] start failure."
End If
End With
End With
End With
End With
Loop
Set objSWbemServicesEx = Nothing
WScript.Quit 0
ух ты круто ;) спасибо тебе милый человек дай бог тебе здоровья !
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC