Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Ограничение времени работы избранного процесса

Ответить
Настройки темы
VBS/WSH/JS - [решено] Ограничение времени работы избранного процесса

Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Нашел тут скрипт который проверяет время работы процесса и если оно превысило заданный - убивает.

Скрытый текст

Код: Выделить весь код
Set WshShell  = CreateObject("Wscript.Shell")
Dim InfoTime, StartTime, EndGame, Game

Game = "notepad.exe"

InfoTime  = InputBox("Введите количество игровых минут", "Game's killer", "60") ' час времени на игру
Set oWmi  = GetObject("WinMgmts:{impersonationLevel=impersonate}!//./root/cimv2")

WScript.Sleep 60000 ' Время, чтобы успеть включить игру (1 минута)
StartTime = Now
WshShell.RegWrite "HKCU\Test\StartTime", StartTime, "REG_SZ"
WshShell.RegWrite "HKCU\Test\InfoTime", InfoTime, "REG_SZ"
EndGame = False ' Завершена игра или еще нет. False - не завершена

While (True)
    Call IsTheEndOfGame()
    
    If EndGame<>True Then ' Все еще играем?
        InfoTime = CLng(WshShell.RegRead("HKCU\Test\InfoTime"))
        If ( InfoTime < 0) Then
            Call KillGame()
        Else
            InfoTime = InfoTime + DateDiff("n",now,WshShell.RegRead("HKCU\Test\StartTime"))
            WshShell.RegWrite "HKCU\Test\InfoTime", InfoTime, "REG_SZ"
        End If 
    Else
        ' Вдруг выход из игры, а время еще есть
        Call WaitGame()
    End If 
    
    WScript.Sleep 15000 ' пауза на 15 секунд
Wend 

Sub IsTheEndOfGame()
    EndGame = True
    For Each Process In oWmi.ExecQuery("SELECT * FROM Win32_Process")
        If Process.Name=Game Then 
            s = Process.Name
            EndGame = False
        End If     
    Next
End Sub 

Sub KillGame()
    For Each Process In oWmi.ExecQuery("SELECT * FROM Win32_Process")
        If Process.Name=Game Then 
            ' Выдаем окошко с предупреждением, что время истекло.
            ' (Чтобы можно было сохранить достижения в игре. Иначе обидно будет)
            Window = WshShell.Popup("Через минуту игра закончится, сохранись!",10,"Game's killer",16)
            WScript.Sleep 50000
            Process.Terminate ' Завершаем работу игрушки            
        End If     
    Next
End Sub 

Sub WaitGame()
    For Each Process In oWmi.ExecQuery("SELECT * FROM Win32_Process")
        If Process.Name<>Game Then 
            EndGame = False
        End If     
    Next
End Sub


Ни как не могу переделать под свои нужды. А нужно всё тоже самое, только без всяких записей в реестр и т.п.
Т.е. если время работы процесса > N sec. then kill

Код: Выделить весь код
process = programm.exe
time = 60sec
While 1 
If time > 60sec Then 
Process.Terminate 
Wend
Т.е. скрипт работает, запускаем programm.exe, если время работы процесса больше N сек. - закрываем его, если потом снова запустить programm.exe то скрипт его снова закрывает если превышено время

Отправлено: 18:33, 23-08-2015

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата mapisic:
если потом снова запустить programm.exe то скрипт его снова закрывает »
Если снова запустить — то пойдёт новый отсчёт времени, с нуля.

Ну, например, вот так:
Скрытый текст
Код: Выделить весь код
Option Explicit

Dim strProcessName
Dim intDuration
Dim intPolling

Dim strComputer

Dim objSWbemObjectEx
Dim objSWbemDateTime


strProcessName = "Notepad.exe"
intDuration    = 15
intPolling     = 5

strComputer    = "."

With WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(strComputer, "root\cimv2")
	Set objSWbemDateTime = WScript.CreateObject("WbemScripting.SWbemDateTime")
	
	Do
		For Each objSWbemObjectEx In .ExecQuery("SELECT * FROM Win32_Process WHERE Name = '" & strProcessName & "'")
			objSWbemDateTime.Value = objSWbemObjectEx.CreationDate
			
			If DateAdd("s", intDuration, objSWbemDateTime.GetVarDate()) < Now() Then
				objSWbemObjectEx.Terminate
			End If
		Next
		
		WScript.Sleep intPolling * 1000
	Loop
	
	Set objSWbemDateTime = Nothing
End With

WScript.Quit 0

«strProcessName» — имя процесса, «intDuration» — ограничение на продолжительность работы указанного процесса (в секундах), «intPolling» — период опроса процессов (в секундах).
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:41, 23-08-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Благодарствую. То что нужно.
UPD. если два процесса с одинаковым именем, то таймер для каждого свой?

Последний раз редактировалось mapisic, 23-08-2015 в 20:18.


Отправлено: 20:07, 23-08-2015 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата mapisic:
UPD. если два процесса с одинаковым именем, то таймер для каждого свой? »
Именно так. Только не «таймер», а время создания процесса.

Отправлено: 21:17, 23-08-2015 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Ограничение времени работы избранного процесса

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] подсчёт времени запущенного процесса redebook.exe vlad_exe@vk Скриптовые языки администрирования Windows 13 15-05-2012 23:02
Доступ - [решено] Прекращение работы хост процесса (Прекращение работы хост процесса (Rundll32)) decoy! Microsoft Windows Vista 2 24-04-2010 19:51
Ограничение времени работы avolkov2009 Microsoft Windows NT/2000/2003 4 24-12-2009 14:50
Ограничение времени работы за компом CyraxZ Microsoft Windows 2000/XP 4 08-01-2007 15:36
C++ Builder->Определение времени, необходимого для завершения процесса XCodeR Программирование и базы данных 6 18-01-2005 14:40




 
Переход