1 (изменено: OmTatSat, 2016-02-01 13:03:02)

Тема: AHK: Узнать была ли нажата клавиша, пока был зажат hotkey.

Здравствуйте, нужно по нажатию mbutton проверить крутился ли wheel пока она была нажата

~mButton::

keywait, MButton

Getkeystate, OutputVar, WheelUp, p

ToolTip, %OutputVar%
OutputVar = 
return

проблема в том, что OutputVar отдает U до первого прокрута колеса, потом всегда выдает D, как сделать, чтобы была реальная проверка, заместо старых данных?

2

Re: AHK: Узнать была ли нажата клавиша, пока был зажат hotkey.

~MButton::MState := 1

#If MState
~MButton up::
  MState := 0
  OutputVar := ""
  ToolTip
Return

~WheelUp::
~WheelDown::
  OutputVar ++
  ToolTip, %OutputVar%
Return

#If

3

Re: AHK: Узнать была ли нажата клавиша, пока был зажат hotkey.

Nikva в тултипе цифры появляются, так должно быть?

В любом случае это реакция на wheel, спасибо за вариант!

нашел вариант с IF (A_priorkey = "mbutton")
использую его, так как прост в контексте моего скрипта, если было прокручено колесо то A_priorkey выдаёт wheel...

приведу весь скрипт, может кто-то знает более правильный подход

#NoTrayIcon
#ifwinactive, ahk_class MozillaWindowClass
~mButton::
starttime1 := A_TickCount
MouseGetPos, OutputVarY, OutputVarX
KeyWait, MButton
MouseGetPos, OutputVarY2, OutputVarX2
elapsedtime := A_TickCount - starttime1


IF ((A_priorkey = "mbutton") & (OutputVarX > 108) & (elapsedtime > 220) & (elapsedtime < 520) & (OutputVarX = OutputVarX2) & (OutputVary = OutputVary2) & (A_Cursor = "Arrow"))
{
	ToolTip, %A_priorkey%
Send, +{mButton}
}

4

Re: AHK: Узнать была ли нажата клавиша, пока был зажат hotkey.

OmTatSat пишет:

в тултипе цифры появляются, так должно быть?

Для наглядности, он считает количество поворотов колеса пока оно зажато.

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

#NoTrayIcon
#ifwinactive, ahk_class MozillaWindowClass
~MButton::
MState := 1
starttime1 := A_TickCount
MouseGetPos, OutputVarY, OutputVarX
Return

#If MState
~MButton up::
  MState := 0
  ToolTip
Return

~WheelUp::
~WheelDown::
  MouseGetPos, OutputVarY2, OutputVarX2
  elapsedtime := A_TickCount - starttime1
IF ((OutputVarX > 108) & (elapsedtime > 220) & (elapsedtime < 520) & (OutputVarX = OutputVarX2) & (OutputVarY = OutputVarY2) & (A_Cursor = "Arrow"))
  {
  ToolTip, %A_priorkey%
  Send, +{mButton}
  }
Return

#If

5

Re: AHK: Узнать была ли нажата клавиша, пока был зажат hotkey.

Nikva наоборот, если было прокручено колесо то не выполнять

6

Re: AHK: Узнать была ли нажата клавиша, пока был зажат hotkey.

#NoTrayIcon
#ifwinactive, ahk_class MozillaWindowClass
~MButton::
  MState := 1
  starttime1 := A_TickCount
  MouseGetPos, OutputVarY, OutputVarX
  KeyWait, MButton
  MouseGetPos, OutputVarY2, OutputVarX2
  elapsedtime := A_TickCount - starttime1
  IF ((wheel = "") & (OutputVarX > 108) & (elapsedtime > 220) & (elapsedtime < 520) & (OutputVarX = OutputVarX2) & (OutputVarY = OutputVarY2) & (A_Cursor = "Arrow"))
  {
  ToolTip, %A_priorkey%
  Send, +{mButton}
  }
  wheel := ""
Return

#If MState
~MButton up::MState := 0

~WheelUp::
~WheelDown::
  wheel ++
return
#If

7

Re: AHK: Узнать была ли нажата клавиша, пока был зажат hotkey.

Nikva спасибо, работает. Такой вариант предпочтительней чем с использованием A_priorkey, требует меньше ресурсов, времени?

8

Re: AHK: Узнать была ли нажата клавиша, пока был зажат hotkey.

OmTatSat Зависит от задачи: если нужно узнать какая была нажата кнопка последней то ваш вариант с A_priorkey конечно лучше. Мой вариант в отличии от вашего следит только за конкретными хоткеями, и считает их нажатия.

9

Re: AHK: Узнать была ли нажата клавиша, пока был зажат hotkey.

Понял, благодарю за помощь!