Что нового

Работа с таймером и циклом

FiReDoGGi

Новичок
Сообщения
42
Репутация
2
Тут что то явно не то, о никак не пойму как надо написать.
Нужно чтобы каждые Н минут запускался и выполнялся скрипт Clean.exe
А когда пройдет Д минут то комп логнулся.

Код:
$Clean = InputBox( "Очистка", "Введите время в минутах через которые сумки будут чиститься" )
$Shutdown = InputBox( "Выключение", "Введите время в минутах" )
$ShutdownTimer = TimerInit()
$CleanTimer = TimerInit()
While 1
	$CL = TimerDiff($CleanTimer)/60000
	$SD = TimerDiff($ShutdownTimer)/60000
	If $CL > $Clean Then 
		Run("Clean.exe")
	EndIf
	If $SD > $Shutdown Then 
		Shutdown(0)
		Exit
	EndIf
WEnd
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Добавь строчку, а лучше две.

Код:
$Clean = InputBox("Очистка", "Введите время в минутах через которые сумки будут чиститься")
$Shutdown = InputBox("Выключение", "Введите время в минутах")
$ShutdownTimer = TimerInit()
$CleanTimer = TimerInit()
While 1
    Sleep(100)
    $CL = TimerDiff($CleanTimer) / 60000
    $SD = TimerDiff($ShutdownTimer) / 60000
    If $CL > $Clean Then
        $CleanTimer = TimerInit()
        Run("Clean.exe")
    EndIf
    If $SD > $Shutdown Then
        Shutdown(0)
        Exit
    EndIf
WEnd
 
Автор
F

FiReDoGGi

Новичок
Сообщения
42
Репутация
2
Пасиб! Получите законный +!

А как можно поставить на паузу другой скрипт на определенное время?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Это не такая уж тривиальная задача. Ты должен предусмотреть такую возможность в "другом" скрипте, а затем можешь послать ему сообщение.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Ещё можно заморозить выполнение процесса, но это жёстко :smile:

Код:
_WinAPI_SuspendProcess("ProcName.exe", True)
Sleep(1500)
_WinAPI_SuspendProcess("ProcName.exe", False)

Func _WinAPI_SuspendProcess($iPIDOrName, $iSuspend = True)
	If IsString($iPIDOrName) Then $iPIDOrName = ProcessExists($iPIDOrName)
	If Not $iPIDOrName Then Return SetError(1, 0, 0)
	
	Local $aNtSuspResumProc
	Local $ah_OpProcess = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1F0FFF, 'int', False, 'int', $iPIDOrName)
	
	If $iSuspend Then
		$aNtSuspResumProc = DllCall("ntdll.dll", "int", "NtSuspendProcess", "int", $ah_OpProcess[0])
	Else
		$aNtSuspResumProc = DllCall("ntdll.dll", "int", "NtResumeProcess", "int", $ah_OpProcess[0])
	EndIf
	
	DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ah_OpProcess)
	
	If IsArray($aNtSuspResumProc) Then Return 1
	Return SetError(2, 0, 0)
EndFunc
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
CreatoR сказал(а):
Ещё можно заморозить выполнение процесса, но это жёстко :smile:

Здорово, но это ОООООЧЕНЬ жестко, кроме того NtSuspendProcess не документирована. :blum:
 
Автор
F

FiReDoGGi

Новичок
Сообщения
42
Репутация
2
Не... Это как то слишком...
Есть ли какая нить феня типа паузы?

То есть скрипт пашет. Доходит до момента Run("Тру ля ля")
Встает на паузу до конца выполнения Тру ля ля.
После того как Тру ля ля выполнился - возобновляется.

Такое есть?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
FiReDoGGi сказал(а):
Не... Это как то слишком...
Есть ли какая нить феня типа паузы?

То есть скрипт пашет. Доходит до момента Run("Тру ля ля")
Встает на паузу до конца выполнения Тру ля ля.
После того как Тру ля ля выполнился - возобновляется.

Такое есть?

Ты мастер всех запутывать. :mad:

RunWait() твой друг на веки. Тру ля ля.
 
Автор
F

FiReDoGGi

Новичок
Сообщения
42
Репутация
2
Ахаха. Ну сори. Но это то что нужно =)))
 
Верх