Что нового

Таймер на MsgBox

antisept

Новичок
Сообщения
6
Репутация
0
Здравствуйте! Пытаюсь написать небольшой скрипт для отключения и запуска службы. Он будет висеть в трее. Возникла необходимость вывода нового окна, через определенное время, после отключения службы. Делаю вот так:

Код:
#include <GUIConstantsEx.au3>
TraySetIcon("1.ico")

Opt("TrayMenuMode",1+2)
TraySetState()
TraySetClick(8)

$ServiceName = 'seclogon'
$ServiceNamename = 'RasAuto'
$Traystop  = TrayCreateItem("Стоп", -1, -1, 1)
$Traystart  = TrayCreateItem("Пуск", -1, -1, 1)
TrayCreateItem("")
$TrayExit = TrayCreateItem("Выход")
GUISetState()

While 1
    Switch TrayGetMsg()
        Case $TrayExit
            Exit
        Case $Traystop
            RunWait(@ComSpec &' /c net stop '  & $ServiceName,'', @SW_HIDE)
			RunWait(@ComSpec &' /c net stop '  & $ServiceNamename,'', @SW_HIDE)
Sleep(10000) ;
MsgBox(0, "Сообщение")
			TraySetIcon("2.ico")
		Case $Traystart
            RunWait(@ComSpec &' /c net start '  & $ServiceName,'', @SW_HIDE)
RunWait(@ComSpec &' /c net start '  & $ServiceNamename,'', @SW_HIDE)
			TraySetIcon("1.ico")
    EndSwitch

    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd


В таком случае, после нажатия мышкой на "Стоп" окно появляется через 10 сек. Но, все это время, программа спит. Как сделать так, чтобы в течении этих 10 сек. можно было нажать на "Пуск" и окошко, соответственно не появлялось бы? Если можно, пример кода. Заранее спасибо!
 

Shinoby

Новичок
Сообщения
81
Репутация
2
Код:
MsgBox(0, "Сообщение", "Сообщение", 10)


это окошко будет висеть 10 секунд, а потом само закроется.
 
Автор
A

antisept

Новичок
Сообщения
6
Репутация
0
Shinoby, я наверно неправильно выразился. Мне нужно, чтобы окно появилось через 10 сек. после нажатия на "Стоп"
 

Z_Lenar

Продвинутый
Сообщения
209
Репутация
52
В XP класс окна появляющегося после нажатия на Пуск - DV2ControlHost. Вот пример который ждет 10 секунд и в случае истечении времени показывает окно. В случае активности меню, которое появляется после нажатия на "Пуск", просто завершается.
Код:
Global $timer = TimerInit()
While 1
	If $timer <> -1 Then
		If BitAND(WinGetState('[CLASS:DV2ControlHost]'), 2) Then
			; Нажата кнопка "Пуск"
			ExitLoop
		ElseIf TimerDiff($timer) > 10000 Then
			; Истекло время
			MsgBox(0, 'title', 'text')
			ExitLoop
		EndIf
	EndIf
WEnd



Добавлено:
Сообщение автоматически объединено:

Еще можно использовать Adlib...:
Код:
#include <GUIConstantsEx.au3>
TraySetIcon("1.ico")

Opt("TrayMenuMode", 1 + 2)
TraySetState()
TraySetClick(8)

$stop = 0
$ServiceName = 'seclogon'
$ServiceNamename = 'RasAuto'
$Traystop = TrayCreateItem("Стоп", -1, -1, 1)
$Traystart = TrayCreateItem("Пуск", -1, -1, 1)
TrayCreateItem("")
$TrayExit = TrayCreateItem("Выход")
GUISetState()

While 1
	Switch TrayGetMsg()
		Case $TrayExit
			Exit
		Case $Traystop
			RunWait(@ComSpec & ' /c net stop ' & $ServiceName, '', @SW_HIDE)
			RunWait(@ComSpec & ' /c net stop ' & $ServiceNamename, '', @SW_HIDE)
			TraySetIcon("2.ico")
			$stop = 1
			AdlibRegister("_Alert", 10000)
		Case $Traystart
			$stop = 0
			RunWait(@ComSpec & ' /c net start ' & $ServiceName, '', @SW_HIDE)
			RunWait(@ComSpec & ' /c net start ' & $ServiceNamename, '', @SW_HIDE)
			TraySetIcon("1.ico")
	EndSwitch

	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch

	If $stop <> 0 And BitAND(WinGetState('[CLASS:DV2ControlHost]'), 2) Then
		AdlibUnRegister("_Alert")
		$stop = 0
	EndIf
WEnd

Func _Alert()
	MsgBox(0, "Сообщение", '')
	$stop = 0
	AdlibUnRegister("_Alert")
EndFunc   ;==>_Alert
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
Пример #1
Код:
#include <GUIConstantsEx.au3>
TraySetIcon("1.ico")

Opt("TrayMenuMode",1+2)
TraySetState()
TraySetClick(8)

$ServiceName = 'seclogon'
$ServiceNamename = 'RasAuto'
$Traystop  = TrayCreateItem("Стоп", -1, -1, 1)
$Traystart  = TrayCreateItem("Пуск", -1, -1, 1)
TrayCreateItem("")
$TrayExit = TrayCreateItem("Выход")
GUISetState()


$WinMsg = False
$timer = 0

While 1

	If $WinMsg Then
		If TimerDiff($timer) > 10000 Then
			$WinMsg = False
			MsgBox(0, "Сообщение", '')
		EndIf
	EndIf


    Switch TrayGetMsg()
        Case $TrayExit
            Exit
        Case $Traystop
;~ 			RunWait(@ComSpec &' /c net stop '  & $ServiceName,'', @SW_HIDE)
;~          RunWait(@ComSpec &' /c net stop '  & $ServiceNamename,'', @SW_HIDE)

			$WinMsg = True
			$timer = TimerInit()

            TraySetIcon("2.ico")
        Case $Traystart
;~ 			RunWait(@ComSpec &' /c net start '  & $ServiceName,'', @SW_HIDE)
;~ 			RunWait(@ComSpec &' /c net start '  & $ServiceNamename,'', @SW_HIDE)

			$WinMsg = False

            TraySetIcon("1.ico")
    EndSwitch

    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
	EndSwitch
WEnd

Пример #2
Код:
#include <GUIConstantsEx.au3>
TraySetIcon("1.ico")

Opt("TrayMenuMode",1+2)
TraySetState()
TraySetClick(8)

$ServiceName = 'seclogon'
$ServiceNamename = 'RasAuto'
$TrayCI  = TrayCreateItem("Пуск", -1, -1, 1)
TrayCreateItem("")
$TrayExit = TrayCreateItem("Выход")
GUISetState()


$WinMsg = False
$TrayCIMsg = True
$timer = 0

While 1

	If $WinMsg Then
		If TimerDiff($timer) > 10000 Then
			$WinMsg = False
			MsgBox(0, "Сообщение", '')
		EndIf
	EndIf


    Switch TrayGetMsg()
        Case $TrayExit
            Exit
        Case $TrayCI
			If $TrayCIMsg Then
				;~ 	Если ПУСК
;~ 				RunWait(@ComSpec &' /c net start '  & $ServiceName,'', @SW_HIDE)
;~ 				RunWait(@ComSpec &' /c net start '  & $ServiceNamename,'', @SW_HIDE)
				TrayItemSetText($TrayCI, "Стоп")
				$TrayCIMsg = False
				$WinMsg = False
				TraySetIcon("1.ico")
			Else
				;~ 	Если СТОП
;~ 				RunWait(@ComSpec &' /c net stop '  & $ServiceName,'', @SW_HIDE)
;~ 				RunWait(@ComSpec &' /c net stop '  & $ServiceNamename,'', @SW_HIDE)
				TrayItemSetText($TrayCI, "Пуск")
				$TrayCIMsg = True
				$WinMsg = True
				$timer = TimerInit()
				TraySetIcon("2.ico")
			EndIf
			ConsoleWrite($WinMsg&@CRLF)
    EndSwitch

    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
	EndSwitch
WEnd
 
Автор
A

antisept

Новичок
Сообщения
6
Репутация
0
Z_Lenar, ---Zak---, спасибо большое! Начал немного понимать)
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Ну и мой пример с использованием adlib
Код:
#include <GUIConstantsEx.au3>
TraySetIcon("1.ico")

Opt("TrayMenuMode",1+2)
TraySetState()
TraySetClick(8)

$ServiceName = 'seclogon'
$ServiceNamename = 'RasAuto'
$Traystop  = TrayCreateItem("Стоп", -1, -1, 1)
$Traystart  = TrayCreateItem("Пуск", -1, -1, 1)
TrayCreateItem("")
$TrayExit = TrayCreateItem("Выход")
GUISetState()

While 1
    Switch TrayGetMsg()
        Case $TrayExit
            Exit
        Case $Traystop
;~            RunWait(@ComSpec &' /c net stop '  & $ServiceName,'', @SW_HIDE)
;~            RunWait(@ComSpec &' /c net stop '  & $ServiceNamename,'', @SW_HIDE)
AdlibRegister("_tst1", 10000)
            TraySetIcon("2.ico")
        Case $Traystart
            RunWait(@ComSpec &' /c net start '  & $ServiceName,'', @SW_HIDE)
RunWait(@ComSpec &' /c net start '  & $ServiceNamename,'', @SW_HIDE)
AdlibUnRegister("_tst1")
            TraySetIcon("1.ico")
    EndSwitch

    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func _tst1()
AdlibUnRegister("_tst1")
MsgBox(0, "Сообщение", "Служба остановлена")
EndFunc
 
Верх