Переключение кнопки удержания AHK

#autohotkey

#автоотключение

Вопрос:

Я хочу, чтобы правая кнопка мыши отправляла одно нажатие клавиши ВНИЗ и другое отдельное, одиночное нажатие клавиши ВВЕРХ.

Пример «Псевдокода», в котором нажатие правой кнопки мыши переключает инструмент «пипетка», посылая его горячую клавишу (i), а отпускание правой кнопки мыши отправляет горячую клавишу для кисти (b):

 RButton down::
Send i ; Send eyedropper hotkey

RButton up::
Send b ; Send brush hotkey
  

Из других заданных вопросов я понимаю, что цикл while с использованием GetKeyState может частично завершиться, но цикл while приводит к быстрому срабатыванию клавиши, что нежелательно.

Как мне заставить правую кнопку мыши посылать соответствующую горячую клавишу вверх / вниз только один раз на up / down?

Комментарии:

1. У меня это работает, заменяя RButton down:: на RButton:: и RButton down выдает синтаксическую ошибку

Ответ №1:

 ; RIGHT BUTTON HOTKEY
RButton::
GetKeyState, state, RButton, P ;GET RIGHT MOUSE BUTTON STATE
if state = D ;IF BUTTON STATE = DOWN 
{
    SetTimer, CheckRButtonState, 10 ;SET TIMER TO MONITOR WHEN IT WAS RELEASED
    Goto, RButtonDown ;JUMP TO SUBROUTINE FOR BUTTON STATE = DOWN
}
return
; TIMER
CheckRButtonState: ;TRIGGERED BY TIMER IN EVERY 10 MILLISECONDS
GetKeyState, state, RButton, P ;GET RIGHT MOUSE BUTTON STATE
if state = U ;IF BUTTON STATE = UP 
{
    SetTimer, CheckRButtonState, Off ;STOP TIMER
    Goto, RButtonUp ;JUMP TO SUBROUTINE FOR BUTTON STATE = UP
}
return
; SUBROUTINE FOR RIGHT BUTTON PRESSED
RButtonDown:
TrayTip,Down, %state% ;PUT HERE THE TASKS YOU WANT IT TO PERFORM WHEN BUTTON IS DOWN
return
; SUBROUTINE FOR RIGHT BUTTON RELEASED
RButtonUp:
TrayTip,Up, %state% ;PUT HERE THE TASKS YOU WANT IT TO PERFORM WHEN BUTTON IS UP
return