#if-statement #timer #autohotkey
#if-оператор #таймер #автоотключение
Вопрос:
Я нахожу этот код в этом потоке: приостановка, приостановка, скрытие, открытие окна GUI:
Gui % (MainGui:=!MainGui) ? "Hide" : "Show"
Что он делает? Я предполагаю, что это своего рода простое if
выражение для горячих клавиш, но, проверяя примеры на двух страницах, я не вижу, где оно находится.
Если SetTimer
используется, счетчик будет увеличиваться только в том случае, если этот код помещен внутрь подпрограммы. Если поместить снаружи, счетчик останавливается.
Gui LastFound AlwaysOnTop ToolWindow -Caption
Gui, Add, Text, vcounter, 00000
Gui, Show, NoActivate
SetTimer, Update, 100 ; 100 ms
Update:
counter
GuiControl,, counter, %counter%
^esc::Gui % (MainGui:=!MainGui) ? "Hide" : "Show"
Return
Ответ №1:
Это своего рода оператор в выражениях:
Тернарный оператор [v1.0.46 ]. Этот оператор является сокращенной заменой оператора if-else . Он оценивает условие в своей левой части, чтобы определить, какая из двух его ветвей должна стать его конечным результатом. Например, var := x>y ? 2: 3 сохраняет 2 в переменной, если x больше y; в противном случае он сохраняет 3. Для повышения производительности вычисляется только выигрышная ветвь (см. Оценка короткого замыкания).
Команда ^esc::Gui % (MainGui:=!MainGui) ? "Hide" : "Show"
состоит из двух частей.
(MainGui:=!MainGui)
Переключает значение переменнойMainGui
на противоположное, обычно сTrue
наFalse
и наоборот.- Использует стандартную форму троичного оператора для проверки значения переменной
MainGui
. Если этоTrue
так, он использует значениеHide
, если этоFalse
так, он использует значениеShow
.
^esc::Gui % (MainGui:=!MainGui) ? "Hide" : "Show"
после всех оценок преобразуется в одно из следующих значений:
1. Если MainGui
True
==> Gui Hide
2. Если MainGui
False
==> Gui Show
Краткое объяснение: ^esc
горячая клавиша скрывает графический интерфейс, если он активен, показывает его, если он скрыт.
Комментарии:
1. Я вижу. Знаете ли вы, почему счетчик останавливается, если он помещен вне SetTimer ?
2. Вы должны поместить его после параметра SetTimer, а не раньше.
3. Я знаю. Но почему это так?
4. После определения
^esc
горячей клавиши раздел автоматического выполнения заканчивается. Любой код после этого может быть вызван только с помощью горячей клавиши, таймера или функции onMessage() .