1 (изменено: zolotaja, 2020-06-26 13:43:40)

Тема: AHK: Удерживать зажатым Alt

Здравствуйте! Необходимо, чтобы по нажатию клавиши удерживался Alt.
Нашла вот этот код:


vk14::
    If isKeyPressed := !isKeyPressed    ; Позволяет чередовать действия при нажатии капса . При каждой проверке этого условия в переменную isKeyPressed записывается значение обратное её текущему значению.
        SetTimer, SendA, 40             ; Таймер позволяет отправлять нажатия каждые 40мс и не мешает скрипту в паузах «параллельно» выполнять прочие подпрограммы.
    Else
    {
        SetTimer, SendA, Off            ; Если это второе нажатие капса — выключаем таймер
        Send {vk57 Up}                  ; Чтоб не возникло «залипание» отправляем отпускание клавиши.
    }
    KeyWait vk14                       ; ждём физического отпускания капса чтоб не перезапускать таймер при каждом нажатии капса во время автоповтора нажатий капса.
    return

SendA:
    Send {vk57 Down}
    return

Но он не подходит для Alt и Ctrl, зажать получается, а убрать зажатие - нет.

Может, нужен такой код? :
1. Нажатие клавиши K -> зажать Alt
2. Нажатие Alt+K -> отпустить Alt.

Вообще, мне нужно удержание Alt-a по нажатию Alt-а, но, я так поняла, это невозможно.

Я ничего не понимаю в программировании, буду безмерно благодарна за код! Очень нужен для нормальной работы граф. планшета!

2 (изменено: __Михаил__, 2020-06-26 19:49:44)

Re: AHK: Удерживать зажатым Alt

zolotaja

Надеюсь я всё правильно понял:
Нужно при нажатии некой клавиши заставить скрипт зажать и удерживать клавишу Alt, до тех пор, пока не будет нажата эта некоторая клавиша повторно?

Тогда это решается одной строкой:

Alt:: Send, % (State := !State)? "{Alt Down}":"{Alt Up}"

Зажатие осуществляется в данном примере самой же Alt клавишей.
Одно нажатие - включаем зажим, повторное - выключаем.


Но если не устраивает, то вот ваш вариант:

!vk4B:: Send, {Alt Up}
vk4B:: Send, {Alt Down}

K - включаем зажим.
Alt+K - выключаем.

Win10x64, AHK v1.1.30.03

3

Re: AHK: Удерживать зажатым Alt

__Михаил__ боже мой, Михаил, огромнейшее спасибо!! Все работает, ура! Вы спасли меня от мук с планшетом, который, зараза, не рисует при зажатой клавише на стилусе.
Спасибо!!!

4

Re: AHK: Удерживать зажатым Alt

zolotaja
На стилусе есть кнопки? Интересно, много их?
Если их можно перехватить скриптом - можно добавить ещё функционал.

Я лично ради перехвата клавиш и начал программировать...

Win10x64, AHK v1.1.30.03

5

Re: AHK: Удерживать зажатым Alt

__Михаил__ да, кнопок обычно 2, и + дополнительные клавиши на самом планшете. И они настраиваются, можно любую клавишу или сочетание им назначить.
Я назначила клавишу на двойной щелчок, просто в шоке, что сработало:))
А как еще можно поэкспериментировать?

6 (изменено: __Михаил__, 2020-06-27 18:13:44)

Re: AHK: Удерживать зажатым Alt

zolotaja

Можно например на 1 клавишу назначить смену режима, а на второй клавише в зависимости от режима делать разные действия.

Например в играх я назначил на F1 смену режима, и от этого зависит как будет себя вести левая клавиша мыши (ЛКМ).
-Например одно нажатие F1 - ЛКМ начинает стрелять одиночными с высокой скоростью и точностью - кликер.
-Второе нажатие на F1 - заставляет при удержании ЛКМ уже делать зажим на 1.5 секунды затем ожидание около секунды, чтобы прицелиться. Можно не боятся что патроны быстро потратятся.

Также если F1 удерживается более 1 секунды происходит сброс / выключение перехвата клавиши мыши.

Вариантов применения много, нужно только представить что нужно делать.

Win10x64, AHK v1.1.30.03

7

Re: AHK: Удерживать зажатым Alt

__Михаил__ , ничего себе! Вы не могли бы поделиться этим двухрежимным кодом?
У мня все простенько:
Например,
Режим 1: Ctrl = Ctrl; Num+ = Num +
Режим 2: Сtrl = E; Num+ = C

Как раз сейчас пыталась найти код, чтобы заставить кнопку вести себя иначе при зажатии, не нашла. Вернее, не работает
Можно сделать, чтобы при удержании Shift'а нажималась буква B, например? А Shift, соответственно, не срабатывал в этот момент.

8

Re: AHK: Удерживать зажатым Alt

zolotaja
Стандартные модификаторы (клавиши, что меняют значение для других) лучше бы не трогать, могут появится косяки, но это каждый сам решает конечно.
К ним относятся: Shift, Ctrl, Win, Alt, Fn (которую часто невозможно переназначить).

Сейчас пишу код для смены режима для клавиш...

Win10x64, AHK v1.1.30.03

9 (изменено: __Михаил__, 2020-06-27 19:18:10)

Re: AHK: Удерживать зажатым Alt

zolotaja

После запуска скрипта, всё работает как положено - по стандарту.

F2 - Клавиша смены режима.
После нажатия меняет кнопки: Ctrl на отправку E, Num+ на отправку C.

SW := 0		; Флаг режима 0-выключен, 1-включен (менять не нужно)

F2::		; F2 - Клавиша смены режима:
If (SW < 1)	; Меняет кнопки: Ctrl на E, Num+ на C
{
 SW := 1		; Меняем флаг
 ToolTip, Замена клавиш:`nCtrl`t->`tE`nNum+`t->`tC	; Отобразить подсказку
 Hotkey, Ctrl, Ctrl_E	; Назначаем хук (перехват) клавиши Ctrl
 Hotkey, Ctrl, On	; Включаем его
 Hotkey, NumpadAdd, NumpadAdd_C		; Назначаем хук (перехват) клавиши Num+
 Hotkey, NumpadAdd, On			; Включаем его
}
Else	; Выключает хук кнопок Ctrl и Num+, делая их снова стандартными.
{
 SW := 0				; Меняем флаг
 ToolTip, Замена клавиш: Отключена	; Отобразить подсказку
 Hotkey, Ctrl, Off			; Выключаем хук Ctrl
 Hotkey, NumpadAdd, Off			; Выключаем хук Num+
}
Sleep, 2000
ToolTip
Return


Ctrl_E:
Send, E
Return

NumpadAdd_C:
Send, C
Return
Win10x64, AHK v1.1.30.03

10

Re: AHK: Удерживать зажатым Alt

zolotaja

При зажатии клавиши Shift - посылает клавишу B, пока не будет отжата Shift.

Пример с отображением:

sc2A::	; Shift
ToolTip, Shift
KeyWait, %A_ThisHotkey%, U T.3	; Ожидать отжатия клавиши 300мс.
If (ErrorLevel) ; если зажим:
{
 ToolTip, Shift зажат
 Loop
 {
  If not getkeystate(A_ThisHotkey,"p")	; Проверка, нажата ли клавиша Shift.
   Break
  Send, B		; Послать нажатие B
  Sleep, 50		; Задержка перед очередной проверки.
 }
}
Else
{
 Sleep, 500
 ToolTip, Shift отпущен
}
Sleep, 500
ToolTip
Return
Win10x64, AHK v1.1.30.03

11

Re: AHK: Удерживать зажатым Alt

__Михаил__ огромное спасибо!
А можно сделать так, чтобы Shift нажимался как обычно при однократном нажатии?
Сейчас ничего не происходит, если просто 1 раз нажать Shift.

12

Re: AHK: Удерживать зажатым Alt

zolotaja

В этом и кроется проблема с переназначением модификаторов.
Лучше их не использовать как одиночное действие.

Win10x64, AHK v1.1.30.03

13

Re: AHK: Удерживать зажатым Alt

__Михаил__ с обычными клавишами такая же ситуация. Если задать, чтобы при зажатии F нажималась C, то F прямому назначению больше не работает)

14

Re: AHK: Удерживать зажатым Alt

zolotaja

При коротком нажатии F работает стандартно, при зажатии на 200мс и более отправляет нажатие C.

sc21::	; F
KeyWait, %A_ThisHotkey%, U T.2	; Ожидать отжатия клавиши 200мс.
If (ErrorLevel) ; Если зажим:
{
 Send, {sc2E}	; C
 Return
}
Send, {sc21}	; F
Return
Win10x64, AHK v1.1.30.03

15

Re: AHK: Удерживать зажатым Alt

__Михаил__ не сразу, но я разобралась, в чем проблема: мой планшет не способен передавать зажатие клавиши:)))
На клавиатуре все работает)
Все равно большое спасибо!)