Как переназначить кнопку двойного щелчка в autohotkey

У меня есть специальная кнопка мыши, которая служит двойным щелчком мыши. У него нет специального ключа, он просто посылает два сигнала LButton.

Я ввел #InstallMouseHook в мой скрипт, чтобы иметь возможность отслеживать щелчки мыши. Я получил это после нажатия двойной кнопки несколько раз:

VK  SC  Type    Up/Dn   Elapsed Key     
---------------------------------------------------------------------------------------     
04  000     d   2.78    MButton         
04  000     u   0.19    MButton         
01  000     d   0.65    LButton         <- Manual DC     
01  000     u   0.17    LButton         
01  000     d   0.11    LButton         
01  000     u   0.14    LButton         
04  000     d   0.75    MButton         
04  000     u   0.19    MButton         
01  000     d   0.45    LButton         <- Special button DC            
01  000     u   0.00    LButton         
01  000     d   0.00    LButton         
01  000     u   0.00    LButton    

Из того, что я предполагаю, прошедшая клавиша является ключом к определению, что такое двойной щелчок (DC) с помощью кнопки мыши DC, а какой - вручную, дважды щелкнув левой кнопкой мыши. Я хочу переназначить предыдущий сценарий, а не последний (кнопка DC: что-то еще, например, средний щелчок и мой двойной щелчок левой кнопкой мыши, чтобы остаться прежним). До сих пор кажется, что истекшее время для кнопки постоянного тока составляет <2,0, а для постоянного тока>2,0.

Идея состоит в том, чтобы иметь что-то вроде этого (не на языке AHK):

loop 
 if (LButton == 1) //pressed
    {
    t=StartElapseTimer;
    if (t<2 && LButton == 1) //how to check it went down and up before down the 2nd time?
       LButton::MButton; //the remapping I want
    else // t>2
       Nothing //let me do a regular DC
    }
end

Не могли бы вы помочь мне с тем, как запустить таймер и какие переменные среды должны быть установлены?

Благодарю.

1 ответ

Решение

При каждом нажатии вы должны проверить время, прошедшее с момента последнего нажатия, и решить, как обращаться с информацией:

dcTime := 50

LButton::
    if(A_PriorHotkey = A_ThisHotkey && A_TimeSincePriorHotkey < dcTime) {
        Send, {MButton}
    } else {
        Send, {LButton}
    }
return

Конечно, вам придется настроить время ожидания в соответствии со скоростью вашей кнопки мыши. Я также рекомендую звонить SetBatchLines, -1 так как это минимизирует неточности в измерении времени.

Другие вопросы по тегам