Тема: AHK: Подсчет длительности нажатия на кнопку
Есть функция, отслеживающая нажатие одной из заданных кнопок, координаты курсора, название нажатой кнопки (или кнопок) и тип нажатия (обычное, со смещением курсора, одновременное на несколько кнопок). Вот код:
#SingleInstance
SetBatchLines, -1
gui, +resize
gui, show, w500 h700
sleep 400
Loop
{
click_hunter("lbutton,rbutton,mbutton", "key_event")
msgbox, %key_event_err% - %key_event_posX% - %key_event_posY% - %key_event_keys%
}
return
;click_hunter ожидает нажатие и отпускание одной или нескольких кнопок (arrayCH),
;возвращает тип нажатия (%var_nameCH%_err)(несколько кнопок одновременно, нажатие со смещением, их комбинацию или обычный клик).
;Также возвращает координаты (%var_nameCH%_posX, %var_nameCH%_posY) курсора в момент нажатия, а если курсор был смещен,
;то и в момент отпускания. Кроме того, возвращает имя сработавший кнопки или кнопок (%var_nameCH%_keys).
click_hunter(arrayCH, var_nameCH)
{
global
event_hunter(arrayCH, "D", "mouse_press")
StringLeft, proove, mouse_press_state, 15
if (proove = "toomanycontrols")
{
%var_nameCH%_err := mouse_press_state
%var_nameCH%_posX := % mouse_press_posX
%var_nameCH%_posY := % mouse_press_posY
}
event_hunter(mouse_press_keys, "U", "mouse_unpress")
if (mouse_press_posX != mouse_unpress_posX and mouse_press_posY != mouse_unpress_posY) = 1
{
if (proove = "toomanycontrols")
{
%var_nameCH%_err := % "cursoroffset," %var_nameCH%_err
%var_nameCH%_posX := % %var_nameCH%_posX "," mouse_unpress_posX
%var_nameCH%_posY := % %var_nameCH%_posY "," mouse_unpress_posY
}
else
{
%var_nameCH%_err := "cursoroffset"
%var_nameCH%_posX := % mouse_press_posX "," mouse_unpress_posX
%var_nameCH%_posY := % mouse_press_posY "," mouse_unpress_posY
}
}
if (mouse_press_posX = mouse_unpress_posX and mouse_press_posY = mouse_unpress_posY and proove != "toomanycontrols") = 1
{
%var_nameCH%_err := "normal"
%var_nameCH%_posX := mouse_press_posX
%var_nameCH%_posY := mouse_press_posY
}
%var_nameCH%_keys := mouse_press_keys
}
;event_hunter Ожидает перехода одного из контролов (Array)
;в заданное состояние (state_type) и возвращает координаты курсора на момент события (%var_name%_posX, %var_name%_posY)
;и имя сработавший кнопки или кнопок (%var_name%_keys). Также, если сработали две кнопки одновременно,
;переменная %var_name%_state принимает значение "toomanycontrols", иначе - "normal"
event_hunter(Array, state_type, var_name)
{
global
local control_amount
Loop
{
Loop, parse, Array, `,;Разбор массива для проверки
{
GetKeyState, state_%A_index%, %A_LoopField%
if state_%A_index% = %state_type%
{
control_amount += 1
if control_amount > 1
returned := % returned "," A_LoopField
else
returned := A_LoopField
}
}
if control_amount > 1
{
%var_name%_state := "toomanycontrols"
%var_name%_keys := returned
}
else if control_amount = 1
{
%var_name%_keys := returned
%var_name%_state := "normal"
}
else
%var_name%_state := "false"
MouseGetPos, posX, posY
%var_name%_posX := posX
%var_name%_posY := posY
if (%var_name%_state != "false")
break
else
{
sleep 1
continue
}
}
}
guiclose:
exitapp
return
Нужно каким-то образом отследить время нажатия на кнопку (разумеется, не мешая исполнению уже имеющимся командам скрипта). Есть у кого нибудь идеи, как это сделать?