Lbutton:: Send, % (State1 := !State1) ? "{Lbutton Down}" (a := 1) / 0 : "{Lbutton Up}" (a := 2) / 0
Lbutton:: − сам хоткей, т.е. всё последующее срабатывает при нажатии на левую кнопку мыши.
Send, % − команда отправки нажатий.
Знак процента говорит, что дальше будет не сырой текст, а выражение, которое надо будет высчитать.
Само выражение состоит из громоздко написанного тернарного оператора:
<условие> ? <если_верно> : <если_ложно>
(State1 := !State1) − значение переменной
State1 меняется на противоположное (единица на ноль и наоборот).
Если в результате
State1 не равен нулю, то вычислится и передастся в команду Send следующая часть:
"{Lbutton Down}" − зажимается левая кнопка мыши;
(a := 1) / 0 − Здесь переменной
a присваивается единица, и, видимо, чтобы эта единица не попала в команду Send, всё присваивание делится на ноль − так как делить на ноль нельзя, результатом этого куска будет пустая строка. Конкретно в этом коде эта переменная не используется, и её значение всё равно зависит от
State1, так что мне не очень понятно, зачем это всё нужно.
Если
State1 в вычисленном условии оказывается нулём, то отправится вторая часть:
"{Lbutton Up}" − левая кнопка мыши отпускается.
(a := 2) / 0 − переменной
a присваивается 2 и снова экранируется делением на ноль.
Как результат, при первом нажатии на ЛКМ, ЛКМ зажимается, а при втором – отжимается, то есть, ЛКМ начинает работать как переключатель.
Итого, это можно было бы написать длиннее, зато более понятно, таким образом:
Code: Select all
LButton::
State1 := Not State1
If (State1 == 1) {
Send {LButton Down}
a := 1
} Else {
Send {LButton Up}
a := 2
}
Return