1 (изменено: Pino43t, 2021-05-12 15:34:23)

Тема: Скрипт на срабатывание при зажатии клавиш

Всем привет. Помогите, пожалуйста, разобраться как сделать так, чтобы при использовании данного скрипта, не учитывались некоторые комбинации (а точнее простые клавиши без модификаторов ctrl, alt, shift)

#InstallKeybdHook

isInUse = 0

RepeatPress( key ){
    global isInUse
    loop {
        if not GetKeyState( key, "P" ){
            break
        }
       if not isInUse  {
            Send, {%key%}
        }
        sleep 1
    }
    return
}

RepeatPressCtrl( key ){
    global isInUse = 1
    loop {
        if not GetKeyState( key, "P" ){
            isInUse = 0
            break
        }
        if GetKeyState( "Ctrl", "P" ){
            Send, ^{%key%}
        }
        sleep 1
    }
    return
}

RepeatPressShift( key ){
    global isInUse = 1
    loop {
        if not GetKeyState( key, "P" ){
            isInUse = 0
            break
        }
        if GetKeyState( "Shift", "P" ){
            Send, +{%key%}
        }
        sleep 1
    }
    return
}

RepeatPressBlind( key ){
    loop {
        if not GetKeyState( key, "P" ){
            break
        }
        Send, {Blind}{%key%}
        sleep 1
    }
    return
}

RepeatPressRedirect( holdKey, sendKey ){
    loop {
        if not GetKeyState( holdKey, "P" ){
            break
        }
        Send, {Blind}{%sendKey%}
        sleep 1
    }
    return
}

#IfWinActive World of Warcraft
*End::Suspend

*1::RepeatPressBlind( "1" )
*2::RepeatPressBlind( "2" )
*4::RepeatPressBlind( "4" )
*5::RepeatPressBlind( "5" )
*7::RepeatPressBlind( "7" )
*f::RepeatPressBlind( "f" )
*r::RepeatPressBlind( "r" )
*v::RepeatPressBlind( "v" )
*t::RepeatPressBlind( "t" )
*к::RepeatPressBlind( "к" )
*ч::RepeatPressBlind( "ч" )
*с::RepeatPressBlind( "с" )
*м::RepeatPressBlind( "м" )
*n::RepeatPressBlind( "n" )
*т::RepeatPressBlind( "т" )
*п::RepeatPressBlind( "п" )
*g::RepeatPressBlind( "g" )
*н::RepeatPressBlind( "н" )
*x::RepeatPressBlind( "x" )
*3::RepeatPressBlind( "3" )
*а::RepeatPressBlind( "а" )
*е::RepeatPressBlind( "е" )

Нужно чтобы к примеру срабатывала комбинация Alt+А, но не срабатывала при обычном нажатии А. И именно команда шла спамом, до момента отжатия. Заранее огромное спасибо.

2

Re: Скрипт на срабатывание при зажатии клавиш

Наверно как-то так:

RepeatPress(Key, Wait := 10){
 While % GetKeyState(key, "P"){
  SendInput, {%key%}
  Sleep, % Wait
 }
}

+w:: RepeatPress("w")		; Shift + W
!t:: RepeatPress("t", 0)	; Alt + T
Win10x64, AHK v1.1.33.09 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

3

Re: Скрипт на срабатывание при зажатии клавиш

__Михаил__
К сожалению данные команды исключают нажатие комбинации клавиши shift+w. То есть команда срабатывает при нажатии данной комбинации, но выводит нажатие кнопки "W" без модификатора....

4

Re: Скрипт на срабатывание при зажатии клавиш

Тогда такой код:

Shift & r::
While % GetKeyState("r","P"){
 SendInput, {Blind}r
}
Return

Shift & q::
While % GetKeyState("q","P"){
 SendInput, {Blind}q
}
Return

Shift & w::
While % GetKeyState("w","P"){
 SendInput, {Blind}w
}
Return

Shift & 1::
While % GetKeyState("1","P"){
 SendInput, {Blind}1
}
Return

Может есть и другой способ - лень искать.

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

5 (изменено: __Михаил__, 2021-05-15 02:25:59)

Re: Скрипт на срабатывание при зажатии клавиш

Сделать в виде функции не выйдет (я по крайней мере не знаю как) - {Blind} принимает строку, которую нужно напечатать.

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

6

Re: Скрипт на срабатывание при зажатии клавиш

К сожалению, данный способо также не актуален. Ужасные фризы происходят просто во время нажатия шифта, и срабатывание происходит не от комбинации а от шифта.

7

Re: Скрипт на срабатывание при зажатии клавиш

Не легче ли тогда сделать запуск на одиночную клавишу?
Например нажатие 'T' будет посылать Shift+(нужная клавиша). Установить эти клавиши так, чтобы не мешали стандартным (для движения / управления персонажем).
Переключать эти клавиши можно например через Caps Losk, Num Lock - так как видно лампочку (мол активен режим 1,2 и т.д.). В зависимости от активного индикатора клавиша 'T' может посылать разные зажатия с 'Shift' например.

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

8

Re: Скрипт на срабатывание при зажатии клавиш

__Михаил__
К сожалению Ваше предложение не решит проблему. Так как важна мобильность и отсутствие различных модификаторов для переключения (Капслок намлок и тд). Но в любом случае спасибо. Возможно, у кого то есть еще идеи как это можно сделать?

9

Re: Скрипт на срабатывание при зажатии клавиш

Думаю посылать те клавиши, которые запускают команду не выйдет.

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

10

Re: Скрипт на срабатывание при зажатии клавиш

а если говорить про исключение какой то кнопки из уже существующего скрипта? То есть к примеру нажатие кнопок с спамом команды по модификатору ctrl,shift, alt но исключить простое нажатие без модификатора?
К примеру:
ctrl+А  (спам)
shift+A (спам)
alt+A (спам)
А (исключить)
?