1

Тема: AHK: добавить к кнопке мыши клавишу, если мышь зажата N sec

В общем задачу вижу так:
Если мышь зажата более N sec нажать и удерживать клавишу Q в течении K sec

На первый взгляд нарисовал так:


*LButton:: ; при НАЖАТИИ 
KeyWait, LButton, T3 ;N=3 ; ждать когда ОТПУСТИТ, если прошло 3 сек ErrorLevel =1
if ErrorLevel Gosub SendKeyQ
return

SendKeyQ:
Send Q
Sleep, 1000 ; K = 1
Send {Q Up}
return

Кроме того, что работает совсем не обращая внимание на условие 3 сек, в текстовом редакторе не происходит автоповтора буквы. Покопавши хелп выяснил, что возможно нужно в цикле посылать {Q Down}. Проверку отпускания клавиши как-то решил через замену KeyWait на SetTimer и проверку в подпрограмме состояния клавиши, казалось, осталось разобраться с выключением таймера после посылки серии q_нажато, но я уперся в вопрос:

а что при этом происходит с LButton? - мышь все еще передает "я нажата" или на событие "вот я нажалась" включается обработка, которая прерывает передачу "нажато"? На такую печальную мысль меня навело то, что мышь не передавала фокус в окне редактора текста скрипта, точнее не сразу передавала. Я подумал, что надо корректно сформулировать вопрос и спросить компетентных людей.

Надо _добавить_ к срабатыванию кнопки мыши (не меняя ее поведения) срабатывание клавиатурного макроса при условии, что а) мышь зажали на более чем N секунд б) на клавиатуре нужно зажать кнопку и отпустить ее через K секунд.

Подскажите как не прерывать мышь или я что-то не так понимаю?

2 (изменено: bWRmeA, 2014-04-01 17:05:26)

Re: AHK: добавить к кнопке мыши клавишу, если мышь зажата N sec

~LButton::
    KeyWait LButton, T3
    if (ErrorLevel) {
        Send {vk51 Down}
        Sleep 1000
        Send {vk51 Up}
    }
    return
if ErrorLevel Gosub SendKeyQ

это не работает.

Send Q

если нужно нажать клавишу, а не послать символ - используй vkXX