В скрипте Autohotkey, когда пользователь нажимает клавишу CapsLock , должен появиться SplashText , указывающий, что он включен или выключен, когда он выключен, проблема в том, что не о коде, который заставляет его работать, а о том, насколько проще это сделать.
Существуют различные способы сделать это, некоторые требуют около 25 строк, некоторые используют SetTimer и GetKeyState внутренние функции и несколько циклов, чтобы запустить его, некоторые всего около пяти и петель нет.
Простейшее:
#SingleInstance Force
SetCapsLockState, Off
~CapsLock::
If (Tog:=!Tog)
SplashTextOn ,350 ,35 , Wanted !, [CapsLock] Activated.
else
SplashTextOff
return
Как: If (Tog: =! Tog) так легко запустить этот код? Tog - это просто не инициированная переменная, и каждый раз, когда нажимается CapsLock , она непрерывно меняет свое значение с 1 на 0
Кажется, он действует как флаг в коде? что мне не хватает в этой строке:
If (Tog:=!Tog)
Что заставляет его оценивать по-разному каждый раз?
Ниже приведен другой подход с A = 0 , работающим в качестве переключателя, я сделал это, и он не совсем такой простой, как хотелось бы, но он делает работа.
Более длинный код:
#SingleInstance Force
SetCapsLockState, Off
~CapsLock::
If (A = 0)
{
SplashTextOn ,350 ,35 , Wanted !, [CapsLock] Activated.
A=1
}else
{
SplashTextOff
A=0
}
return
Самый длинный код:
Этот последний получает тот же результат, но проверяет фактическое физическое состояние ключа. Он не будет полагаться на SetCapsLockState, Off в верхней части скрипта, чтобы убедиться, что коммутатор выполнит остальную часть работа в одну строчку как более простая.
#SingleInstance Force
#Persistent
SetTimer, StateCapsLockON_Timer, 100
Return
~CapsLock::
StateCapsLockON_Timer
If GetKeyState("CapsLock", "T")
{
SetTimer, StateCapsLockOFF_Timer, 100
SplashTextOn ,350 ,35 , Wanted !, [CapsLock] Activated.
SetTimer, StateCapsLockON_Timer, Off
}
Return
StateCapsLockOFF_Timer:
If !GetKeyState("CapsLock", "T")
{
SetTimer, StateCapsLockOFF_Timer, Off
SplashTextOff
SetTimer, StateCapsLockON_Timer, On
}
Return
Есть хорошие идеи о том, как If (Tog: =! Tog) работает в простейшем из этих трех примеров?