Что нового

Как вывести параметр во всплывающее меню

Anna

Новичок
Сообщения
119
Репутация
2
При нажатии правой кнопкой мыши на иконке, в трее, всплывает меню: выход и пауза.
Подскажите, пожалуйста, как в это меню вывести параметр Sleep
Три значения, если флажок – галка, напротив единицы то Sleep = 1 минута если 2 то 2 минуты и т д.
Код:
Global $Time_1=1,$Time_2=2,$Time_3=3,$Time_A
$Time_A=$Time_3
While 1
 _test_func()
Sleep($sTime_A * 60 * 1000) ;пауза 3 минуты
WEnd
 
Автор
A

Anna

Новичок
Сообщения
119
Репутация
2
InnI сказал(а):
Вы справку принципиально читать не хотите?
Справкой активно пользуюсь, перефразирую вопрос.
Как присвоить переменной $sTime_A значение переменной $Time_3 если выбран "3 минуты"
Код:
$Time_3 = TrayCreateItem("3 минуты", -1, -1, 0)
$Time_2 = TrayCreateItem("2 минуты", -1, -1, 0)
$Time_1 = TrayCreateItem("минута", -1, -1, 0)
TrayItemSetState($Time_3, $TRAY_CHECKED)

;здесь какое условие нужно?
$Time_A=$Time_3

While 1
 _test_func()
Sleep($sTime_A * 60 * 1000) ;пауза 3 минуты
WEnd
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Код:
$Time_A=0

While 1
	Switch TrayGetMsg()
		Case $Time_1
			$Time_A = 1
		Case $Time_2
			$Time_A = 2
		Case $Time_3
			$Time_A = 3
	EndSwitch
  _test_func()
 Sleep($sTime_A * 60 * 1000) ;пауза 3 минуты
WEnd
 
Автор
A

Anna

Новичок
Сообщения
119
Репутация
2
Спасибо, inververs.
Однако у меня не происходит выбора, точка всегда напротив “минута”, а если устанавливаю “Не отображать в трее пункты меню по умолчанию (Script Paused/Exit)” то возможно изменить выбор, но невозможно осуществить выход.
Код:
;Opt("TrayMenuMode", 1 + 2) ; Не отображать в трее пункты меню по умолчанию
$Time_3 = TrayCreateItem("3 минуты", -1, -1, 1)
$Time_2 = TrayCreateItem("2 минуты", -1, -1, 1)
$Time_1 = TrayCreateItem("минута", -1, -1, 1)
TrayItemSetState(-1, $TRAY_CHECKED)
TrayCreateItem("")
$iExit = TrayCreateItem("Выход")
TraySetState(1) ; Показывает меню трея

$Time_A=0

While 1
    Switch TrayGetMsg()
        Case $Time_1
            $Time_A = 1
        Case $Time_2
            $Time_A = 2
        Case $Time_3
            $Time_A = 3
        ;Case $iExit ; Выход
           ; ExitLoop
    EndSwitch
  _test_func()
 Sleep($sTime_A * 60 * 1000) ;пауза 3 минуты
WEnd
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Anna
не происходит выбора
Ваш скрипт постоянно "спит", а для вызова TrayGetMsg() он должен "бодрствовать". Когда вы во время "спячки" выбираете пункт, ваше действие нигде не сохраняется. Поэтому варианты следующие.

Можно после "сна" узнавать, какой пункт отмечен. Но это не повлияет на быстрый выход.

Можно перевести работу скрипта в режим, который будет прерывать "сон" при выборе пункта
Код:
Opt("TrayOnEventMode", 1)
Но здесь нужно разбивать главный цикл на отдельные функции.

Ещё можно заменить Sleep() на "ручной" расчёт времени
Код:
#include <TrayConstants.au3>

Opt("TrayMenuMode", 1)

$Time_3 = TrayCreateItem("3 минуты", -1, -1, 1)
$Time_2 = TrayCreateItem("2 минуты", -1, -1, 1)
$Time_1 = TrayCreateItem("1 минута", -1, -1, 1)
TrayItemSetState(-1, $TRAY_CHECKED)
TrayCreateItem("")
$iExit = TrayCreateItem("Выход")

$Time_A = 1
$Time_Start = TimerInit()

While 1
    Switch TrayGetMsg()
        Case $Time_1
            $Time_A = 1
        Case $Time_2
            $Time_A = 2
        Case $Time_3
            $Time_A = 3
        Case $iExit
            Exit
    EndSwitch
    If TimerDiff($Time_Start) > ($Time_A * 60 * 1000) Then
      _test_func()
      $Time_Start = TimerInit()
    EndIf
WEnd

Func _test_func()
  ConsoleWrite($Time_A & ":" & TimerDiff($Time_Start) & @CRLF)
EndFunc
В данной реализации, при выборе пункта во время ожидания, скрипт начнёт ждать новое выбранное время, если оно больше, или сразу выполнит функцию, если меньше.
 
Верх