1 (изменено: dredj, 2015-02-11 16:27:19)

Тема: AHK: Длинная горячая клавиша

Следующий хоткей работает когда как или вообще залипает, не могу понять в чём проблема

RAlt::
Send,+^{Left}
Send,^!{1}

может синтаксис неправильный?

2

Re: AHK: Длинная горячая клавиша

Return надо в конце поставить, а в остальном всё правильно.

3

Re: AHK: Длинная горячая клавиша

Клавиша посылает сама себя ( Send,^!{1} ) и, возможно, зацикливается. Чтобы этого избежать, нужно перед названием горячей клавиши поставить префикс $:

$RAlt::
Send,+^{Left}
Send,^!{1}
Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4 (изменено: dredj, 2015-02-11 17:54:41)

Re: AHK: Длинная горячая клавиша

Заменил RAlt на F1, вообщем хоткей работает но теперь залипает Ctrl, добавил Send, {Ctrl} в конце, чтобы не залипало, вроде помогает.

F1::
Send,+^{Left}
Send,^!{1}
Send, {Ctrl}
Return

Но почему вообще залипает Ctrl, вроде ничего сложного?

5

Re: AHK: Длинная горячая клавиша

У меня ничего не залипает, вроде, даже без Send, {Ctrl}.

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

6

Re: AHK: Длинная горячая клавиша

Значит проблема как всегда с моей стороны, прошу прощения. Спасибо за внимание!

7 (изменено: stealzy, 2015-02-12 08:43:21)

Re: AHK: Длинная горячая клавиша

Попробуйте использовать SendInput либо SendPlay:

F1::SendInput +^{Left}^!{1}
+ Функция проверки на залипание:
FixBugUnpressKeys() {
    Static ArrayKeys
    ArrayKeys:=Object()
    ArrayKeys:=["RCtrl", "LCtrl", "LShift", "RShift", "RAlt", "LAlt"]
    i:= ArrayKeys.MaxIndex()
    Loop %i%
    {
        Key:=ArrayKeys[A_Index]
        GetKeyStatePhys := GetKeyState(Key, "P")
        GetKeyStateLogi := GetKeyState(Key)
        DiffKeyState := GetKeyStateLogi-GetKeyStatePhys
        if DiffKeyState {
            Direction := (DiffKeyState=1) ? "Up" : "Down"
            SendInput {%Key% %Direction%}
            MsgBox %Key% will be not %Direction%. I fix it.
        }
    }
}

Вставлять после Send.

8

Re: AHK: Длинная горячая клавиша

stealzy, а если из 'функции проверки на залипание' убрать все лишние переменные и подсократить код?
Текст в MessageBox тоже весьма странный, наверное какое-то авторское видение англ. языка.

FixBugUnpressKeys() {
   for key, key in ["RCtrl", "LCtrl", "LShift", "RShift", "RAlt", "LAlt"]
      if Direction := ["Down",0,"Up"][2+GetKeyState(Key)-GetKeyState(Key, "P")]
         SendInput {%Key% %Direction%}
}