Тема: AHK: неправильная обработка жестов
Здравствуйте. Есть проблема.
Что нужно:
Реализация управления жестами в разных браузерах (хром, фф, опера, ie).
Для начала, необходимы следующие жесты:
ПКМ+жест вверх = новая вкладка (ctrl+t)
ПКМ+жест вниз = закрыть вкладку (ctrl+w)
ПКМ+жест вправо = переключиться на вкладку справа (ctrl+tab)
ПКМ+жест влево = переключиться на вкладку слева (ctrl+shift+tab)
ПКМ+жест (вниз+вверх) = свернуть окно (WinMinimize, A)
Моя реализация
#SingleInstance force
CoordMode, Mouse
#if MouseIsOverBrowser()
~RButton::
global trace := "" ; trace of the mouse in each CLOCK
global completeTrace := "" ; ful-length trace of the mouse
preX := XPos
preY := YPos
while GetKeyState("RButton") {
sleep, 50
MouseGetPos, XPos, YPos
;ToolTip, % XPos " - " YPos
dx := XPos - preX
dy := YPos - preY
;ToolTip, % dx " - " dy
; UP = U, DOWN = D, LEFT = L, RIGHT = R
ignoreZone := 5
if ((abs(dx) > abs(dy)) and (abs(dx) > ignoreZone)) {
if (dx < 0) {
trace := "L"
} else if (dx > 0) {
trace := "R"
}
} else if ((abs(dy) > abs(dx)) and (abs(dy) > ignoreZone)) {
if (dy < 0) {
trace := "U"
} else if (dy > 0) {
trace := "D"
}
} else {
trace := ""
}
StringRight, lastChar, completeTrace, 1
if (lastChar != trace) {
completeTrace .= trace
}
;ToolTip, % completeTrace
preX := XPos
preY := YPos
}
;ToolTip, % completeTrace
; write here nessesary action
if (completeTrace == "L") {
Send {Ctrl Down}{Shift Down}{Tab}{Shift Up}{Ctrl Up}
tooltip, left
}
if (completeTrace == "R") {
Send {Ctrl Down}{Tab}{Ctrl Up}
tooltip, right
}
if (completeTrace == "U") {
Send {Ctrl Down}{SC014}{Ctrl Up}
tooltip, up
}
if (completeTrace == "D") {
Send {Ctrl Down}{w}{Ctrl Up}
tooltip, down
}
if (completeTrace == "DU") {
WinMinimize, A
tooltip, minimize
}
completeTrace := ""
trace := ""
return
#if
MouseIsOverBrowser()
{
global
MouseGetPos, XPos, YPos, WinID, WinControl
if (WinActive("ahk_class Chrome_WidgetWin_1")
or WinActive("ahk_class MozillaWindowClass")
or WinActive("ahk_class OperaWindowClas") ; опера идет нахер большими шагами со своим встроенным обработчиком мыши...
or WinActive("ahk_class IEFrame")) {
return 1
} else {
return 0
}
}
;Esc::ExitApp
Проблемы:
Идеально работает только в Internet Explorer.
В других браузерах проблемы - tooltip всплывает всегда, значит жест отрабатывается как надо.
Но вот действие (сочетание кнопок) может выполниться, а может и нет, при этом WinMinimize, A выполняется всегда.
В чем может быть проблема?