Это аккуратная функция!Я определенно вижу некоторую пользу для этого.В любом случае, вы правильно используете Pause
и Suspend
, но похоже, что !s
предназначался для его включения и выключения (поэтому нет необходимости в !a
).
По некоторым причинам,тем не менее, он не выключится.В моем тестировании функция правильно видела значение «Confine», но не возвращала ложную часть троичной операции.Кажется, он правильно закодирован, но я подозреваю, что может быть проблема (возможная ошибка?) С Return
, правильно оценивающим «Confine».
Вот несколько решений:
- Путем явной проверки, работает ли «Confine»
True
.
Return ( Confine = True ) ? DllCall( "ClipCursor" , UInt , &R ) : DllCall( "ClipCursor" )
- Однако я бы взял троичную формуотключите функцию и переместите ее на горячую клавишу, чтобы избежать ненужных операций и назначений, если она оценивается как ложная.Для меня это немного чище.
!s:: ; Hotkey will toggle status
Confine := !Confine
MouseGetPos ,, SetY
Confine ? ClipCursor( 0 , SetY , A_ScreenWidth , SetY+1 ) : DllCall( "ClipCursor" )
Return
ClipCursor( x1=0 , y1=0 , x2=1 , y2=1 ) {
VarSetCapacity( R , 16 , 0 )
NumPut( x1 , &R + 0 )
NumPut( y1 , &R +4 )
NumPut( x2 , &R +8 )
NumPut( y2 , &R +12 )
Return DllCall( "ClipCursor" , UInt , &R )
}
- Если вы просто хотите использовать
!a
, чтобы отключить его, вы можете просто сделать это, !a::DllCall( "ClipCursor" )
.Если вы решите пойти по этому пути, я бы порекомендовал удалить все переключаемые части кода из горячей клавиши и функции.