1 (изменено: OmTatSat, 2015-11-06 12:47:07)

Тема: AHK: ПКМ и wheelup = AltTab

Здравствуйте, подскажите пожалуйста в чём может быть причина того, что не работает ~rbutton & wheelup ?
Пробовал версии 1.1 и 1.0.48 без толку((

На данный момент использую скрипт Lexikos, но в нём есть 2 бага:
контекстное меню при простом правом клике открывается ровно через раз,
и если при зажатой правой клавише выполнять жест, то в начале выполнения мышь быстро дёргается от точки начала движения к точке реального смещённого положения курсора доли секунды, но этого достаточно чтобы жест был не узнаваем((


;   - AutoHotkey (any version should be fine)

;   - A  with a wheel

;   - Two or more fingers (optional but recommended)[/color]



; Start with wheel/MButton hotkeys disabled:[/color]

gosub DisableRButtonHotkeys



RButton::

    ; Enable hotkeys while RButton is down.[/color]

    Hotkey WheelUp,   On

    Hotkey WheelDown, On

    Hotkey MButton,   On

  ; Determine initial  position.[/color]

    CoordMode , Screen

    GetPos x1, y1

    Loop

    {

        ; If another hotkey has been triggered...[/color]

        if (A_ThisHotkey != "RButton")

        {

           ; Stop monitoring the other conditions (below).  Just wait[/color]

           ; for the button to be released, then disable the hotkeys.[/color]

            KeyWait RButton

            break

        }

       ; If button has been released...[/color]

        if !GetKeyState("RButton", "P")

        {

          ; Press and release the button.[/color]

            Click R

            ; Break out of the loop to disable the hotkeys.[/color]

            break

        }

        GetPos x2, y2

       ; If  has moved...[/color]

        if (x1 != x2 || y1 != y2)

        {

           ; Set speed to "instant" for best results.[/color]

            SetDefaultpeed 1

          ; Press the button down (at the initial  position).[/color]

            Click Right Down %x2%, %y2%

       ; Move back to where the user had moved the .[/color]

            Move x2, y2

            ; Wait for the button to be released.[/color]

            KeyWait RButton

            ; Release the button.[/color]

            Click Right Up

            ; Break out of the loop to disable the hotkeys.[/color]

            break

        }

        ; Yield CPU time to other applications.[/color]

        Sleep 1

    }

   ; Disable the hotkeys.[/color]

    DisableRButtonHotkeys:

    Hotkey WheelUp,   Off

    Hotkey WheelDown, Off

    Hotkey MButton,   Off

return



WheelUp::   
ifwinactive, _class MozillaWindowClass
{
If Count_Presses > 0 ; если таймер уже запущен, то...
    {
        Count_Presses += 1 ; плюсуем каждое нажатие клавиши (число будет обрабатываться в подпрограмме соответствующего таймера)
        Return ; закончить обработку горячей клавиши (ее дальнейшую обработку уже определяет таймер и его подпрограмма)
    }
    ; иначе - это первое нажатие из новой серии
    Count_Presses = 1 ; выставляем флаг, что клавиша один раз нажата
    SetTimer, Timer_Presses_3, 700 ; переходить к указанной подпрограмме через каждые 300 миллисекунд
Return ; закончить обработку горячей клавиши

Timer_Presses_3: ; подпрограмма действий в зависимости от количества нажатий
    SetTimer, Timer_Presses_3, off ; выключить таймер
    If Count_Presses < 5 ; если клавиша нажата однажды...
    {
    send, {Ctrl down}{Tab} 
    sleep, 500
    send, {left}
    }
    
    If Count_Presses > 5
    {
        sleep, 200
    send, {Ctrl up}{alt down}{Tab} 
    sleep, 500
    send, {left}
      }
    Count_Presses = 0
    return
}


IfWinExist, _class MozillaWindowClass
WinActivate _class MozillaWindowClass
else
run, "C:\ярлыки\m Google url.lnk"
return




    

WheelDown:: WinMinimizeAll

MButton::   Send {Volume_Mute}

Задача - хоткей на сочетание rbutton wheelup.

2

Re: AHK: ПКМ и wheelup = AltTab

OmTatSat, ознакомьтесь с этой темой, отредактируйте свой пост.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: OmTatSat, 2015-11-03 01:04:37)

Re: AHK: ПКМ и wheelup = AltTab

teadrinker простите, вроде исправил как надо.

4

Re: AHK: ПКМ и wheelup = AltTab

Старайтесь использовать заглавные буквы и точки в конце предложений.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: ПКМ и wheelup = AltTab

А по сабжу — забейте, ещё пока не было придумано ни одного корректного способа использовать RButton в качестве горячей клавиши.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: ПКМ и wheelup = AltTab

teadrinker пишет:

использовать RButton в качестве горячей клавиши

Хм... я использую... свое контекстное меню в заголовке окна "параллельно" с оригинальным.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

7

Re: AHK: ПКМ и wheelup = AltTab

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

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: AHK: ПКМ и wheelup = AltTab

teadrinker спасибо, я уже начал думать может у меня на компе глюки какие-то, и этот скрипт имеет баги только у меня.
Жаль, что нельзя rbutton использовать - очень удобно было бы.

9

Re: AHK: ПКМ и wheelup = AltTab

Вышел из положения задействовав программу strokeit. Смог использовать rbutton правда в сочетании с mbutton заместо wheel, что всё равно удобней чем lbutton и wheel. При нажатии rb и mb происходит запуск скомпилированного в .exe кода.

send, {alt down}{Tab} 
    sleep, 500
    send, {left}
    return 

На постоянной основе у меня запущен такой код.

#ifwinactive, ahk_class TaskSwitcherWnd
!lButton:: send, {alt up}

Хочу ещё реализовать, чтобы если мышь над окном ahk_class TaskSwitcherWnd то при клике отправлялся клик.

Пробую через код.

#if MouseIsOver("ahk_class TaskSwitcherWnd")
!lButton::lbutton
    return

MouseIsOver(WinTitle) {
      MouseGetPos,,, Win
    return WinExist(WinTitle . " ahk_id " . Win)
}

Но видимо он конфликтует с предыдущим хоткеем, так как в один момент два условия подходят, как сделать чтобы предпочтение отдавалось второму хоткею?

10 (изменено: OmTatSat, 2015-11-05 16:47:17)

Re: AHK: ПКМ и wheelup = AltTab

Решился конфликт кодом.

GroupAdd, test, _class TaskSwitcherWnd

#if (MouseIsOver("ahk_class TaskSwitcherWnd") && !winactive("ahk_group test"))
!lButton::
MouseGetPos, varx, vary
ControlClick, x%varx% y%vary%, ahk_class TaskSwitcherWnd
send, {alt up}
return

11

Re: AHK: ПКМ и wheelup = AltTab

Нашелся способ использовать ПКМ + wheel

~WheelUp::
GetKeyState, keystate, RButton, p
if keystate = D    ; D = down
  send {alt down} {tab}
else
  SendInput, {WheelUp}
return

Правда чтобы не появлялось контекстное меню, нужно включить программу Stroke It.

Но тут же появился конфликт со скриптом "Фокус мышки под указателем"

#SingleInstance ignore
#NoTrayIcon

WheelUp::
WheelDown::
    Critical
    If(A_ThisHotkey!=A_PriorHotkey || A_TimeSincePriorHotkey>40) ; Определить скорость
        Scroll:= A_ThisHotkey="WheelUp" ? 120<<16 : -120<<16     ; вращения колеса и
    Else                                                         ; задать скорость
        Scroll:= A_ThisHotkey="WheelUp" ? 240<<16 : -240<<16     ; прокрутки.

    CoordMode, Mouse, Screen
    MouseGetPos, mX, mY
    mX &= 0x00000000FFFFFFFF
    Point := mX | mY<<32
    WinID:=DllCall("WindowFromPoint", "int64", Point, "ptr")   ; ID (handle) окна
    Point := mX | (mY-20)<<32                                  ; под мышью.
    NextID:=DllCall("WindowFromPoint", "int64", Point, "ptr")
    mX &= 0x0000FFFF
    SendMessage, 0x20A, %Scroll%, (mY<<16)|mX,, ahk_id %WinID%   ; 0x20A = WM_MOUSEWHEEL
    If (!ErrorLevel && (WinID != NextID))
        SendMessage, 0x20A, %Scroll%, (mY<<16)|mX,, ahk_id %NextID%
Return

Если запускать сначала "ПКМ + wheel" потом "Фокус мышки под указателем", то эти 2 конфликтующих хоткея каким-то образом работают.
Хотелось бы вписать их в один скрипт, может у кого-то есть идеи каким образом это можно сделать?

12

Re: AHK: ПКМ и wheelup = AltTab

OmTatSat, в первом сообщении Вы выложили плохо работающий код. А какова задача - так и не объяснили.

13 (изменено: OmTatSat, 2015-11-06 12:47:42)

Re: AHK: ПКМ и wheelup = AltTab

ypppu, исправил, задача - хоткей на сочетание rbutton wheelup.

14

Re: AHK: ПКМ и wheelup = AltTab

rbutton wheelup

WheelUp - плохой вариант для некоторых окон с полосами прокрутки. При использовании RButton обязательно пострадает контекстное меню, или оно будет появляться когда не надо.

15

Re: AHK: ПКМ и wheelup = AltTab

ypppu, выше писал, что каким-то образом баг или фича программы Stroke It избавляет от проблемы с контекстным меню ПКМ. А на счёт

плохой вариант для некоторых окон с полосами прокрутки

что вы имеете ввиду?

16

Re: AHK: ПКМ и wheelup = AltTab

Когда в составе горячей клавиши есть WheelUp, в некоторых окнах с полосами прокрутки эта горячая клавиша не работает. Например Explorer, Notepad, HH(chm).

17

Re: AHK: ПКМ и wheelup = AltTab

ypppu, понял, спасибо за опыт. Слава Богу пока обходится без этого бага.
Кстати Stroke It походу убирает контекстное меню ПКМ не при всех скриптах. В этом который я указал в теме убирает контекстное меню, попробовал прописать большой скрипт, и контекстное меню появилось. Буду использовать на маленьком скрипте, всё равно удобней чем без него).