1 (изменено: Clannad5, 2022-10-28 12:31:11)

Тема: AHK: Заблокировать Левую кнопку мыши, пока выполняется условие.

Всем привет.
Решив сделать из одной кнопки два действия, я столкнулся с проблемой.

Этап действий:
1. Нажимаю на Numpad7
2. В этот момент нужно сразу же заблокировать любые нажатия левой кнопки мыши и поставить Keywait на отжатие Numpad7
3. После отжатия Numpad7 идёт условие: Если была зажата ЛКМ - выполнить одно действие. Если не была зажата - выполнить второе действие.

В момент 2 и 3, мне нужно чтобы любые ЛКМ нажатие по экрану блокировались, однако чтобы выполнялось условие на нажатие клавиши.
То есть это как если бы я в момент нажатие Numpad7 дописывал LButton::Return, однако так сделать нельзя.

Так как мне заблокировать ЛКМ в момент выполнения условия?

Вот примерные мои попытки:


Numpad7::
{
    KeyWait "Numpad7",'Up'
    State := GetKeyState('LButton', 'P')
    if State = 1
        {
    loop 
        {
            State := GetKeyState('LButton', 'P')
            State2 := GetKeyState('Numpad7', 'P')
            if State = 1 and State2 = 1
                {
                KeyWait "Numpad7", 'Up'
                SendInput "{WheelDown}"
                }
            if State2 = 0
                break
        }
    }
    else
    SendInput "{WheelUp}"
}

Извините что код показываю в V2 виде, но для понимания я думаю смысл не утратится.
Суть в том, что в коде я никак не блокирую ЛКМ нажатие по экрану и из-за этого код становится нерабочим, т.к в редакторе работает колёсико только в том случае, если я не зажимаю ЛКМ по холсту.

2 (изменено: __Михаил__, 2022-10-28 20:51:41)

Re: AHK: Заблокировать Левую кнопку мыши, пока выполняется условие.

Если верно всё понял:

Numpad7::
KPress := 0
HotKey, vk1, Lock, On
KeyWait, % A_ThisHotkey, U
HotKey, vk1, Lock, Off

If (KPress = 0)
 ToolTip, Нажатий ЛКМ не было, 0,0
Else
 ToolTip, % "Нажатий ЛКМ: " KPress, 0,0
Return

Lock:
KPress++
ToolTip, % "KPress: " KPress, 0,0
Return

Данный код позволит в зависимости от количества нажатий ЛКМ выполнять разные действия (если добавить).

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

3 (изменено: Clannad5, 2022-10-29 00:56:17)

Re: AHK: Заблокировать Левую кнопку мыши, пока выполняется условие.

__Михаил__
Он громоздкий, но благодаря вам, я решил свою проблему.


HotKey, Numpad7, Start, On ;Задаём Numpad7 метку Start
return

Start:
HotKey, LButton, Lock, On ; Когда вызвали метку, сразу блочим ЛКМ
KeyWait, Numpad7, U ; Отпускаем Numpad7
SetTimer, LButtonOff, 100 ;Запускаем таймер, чтобы когда лкм отжали, скрипт об этом знал.
GetKeyState, state, LButton, P 
If state = U ; Проверяем зажатость ЛКМ, если не нажат, выйти из действий и просто прокрутить вверх.
{
   HotKey, LButton, Lock, Off
   SendInput {WheelUp}
   return
}
If state = D ; Если ЛКМ остался зажатым, изменяем метку для Numpad7.
   HotKey, Numpad7, Lock2, On

Lock:
Return

Lock2: ; Метка со вторым действием.
GetKeyState, state, LButton, P
if state = U ;Если ЛКМ всё же отпустили, то выйти из метки и вернуть всё как было.
   {
      HotKey, Numpad7, Start, On
      HotKey, LButton, Lock, Off
      SetTimer, LButtonOff, off
      return
   }
if state = D ; Если ЛКМ всё еще зажат, то выполняем прокрутку вниз.
   SendInput {WheelDown}
Return

;Таймер на проверку отжатия ЛКМ клавиши.
LButtonOff:
GetKeyState, state, LButton, P
if state = U
   {
      SetTimer, LButtonOff, off
      HotKey, Numpad7, Start, On
      HotKey, LButton, Lock, Off
   }
   return