1

Тема: AHK: Комбинация клавиш при зажатой кнопке

Здравствуйте.
Помогите, пожалуйста, как сделать, чтобы при зажатой кнопке альт я мог набрать комбинацию клавиш(от однозначного до трехзначного числа) от 1 до 5 и зависимости от комбинации выполнялось определенное действие?
И подскажите, пожалуйста, можно ли сделать, чтобы клавиша альт при этом работала как обычно?
Спасибо!

2

Re: AHK: Комбинация клавиш при зажатой кнопке

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

3

Re: AHK: Комбинация клавиш при зажатой кнопке

ypppu
Я должен отпустить клавишу альт. В начале я нажимаю альт, потом, например, 3, отпускаю, 5, отпускаю, 2, отпускаю, отпускаю альт и скрипт должен понять, что это комбинация из 2, 3, 5

4

Re: AHK: Комбинация клавиш при зажатой кнопке

Не, с Alt не получается. Пока удерживается этот модификатор, другие кнопки (1, 3, 5) нормально не обрабатываются. Вот с Ctrl кое-что выходит.

5

Re: AHK: Комбинация клавиш при зажатой кнопке

С ctrl можно попробовать или с пробелом. Но ctrl должен выполняться в самом действии, хотя надеюсь это не повлияет на скрипт

6

Re: AHK: Комбинация клавиш при зажатой кнопке

#MaxThreadsPerHotkey 10
!1::
!2::
!3::
!4::
!5::
key := RegexReplace(A_ThisHotKey, "^.")
If AlreadyRun
   return
AlreadyRun := 1
While GetKeyState("Alt", "P")
{
   If !key
      Continue
   keys .= key
   key := ""
}
msgbox % keys
AlreadyRun := keys := ""
return

7

Re: AHK: Комбинация клавиш при зажатой кнопке

Спасибо, работает!
А как в этом коде, если что, поменять альт на другую клавишу, пробел, например?

8

Re: AHK: Комбинация клавиш при зажатой кнопке

И еще. Как добавить в код, чтобы при нажатии на клавишу R скрипт вводил комбинацию 2 и 3 при зажатой альт?
Как ни пробовал, на выходе sc13 либо пусто

9

Re: AHK: Комбинация клавиш при зажатой кнопке

Как добавить в код, чтобы при нажатии на клавишу R скрипт вводил комбинацию 2 и 3 при зажатой альт?

#MaxThreadsPerHotkey 10
!1::
!2::
!3::
!4::
!5::
!r::
key := RegexReplace(A_ThisHotKey, "^.")
If AlreadyRun
   return
AlreadyRun := 1
While GetKeyState("Alt", "P")
{
   If !key
      Continue
   if (key = "r")
      key := 23
   keys .= key
   key := ""
}
msgbox % keys
AlreadyRun := keys := ""
return

А как в этом коде, если что, поменять альт на другую клавишу, пробел, например?

А как скрипт узнает для чего нажат пробел?
На контрол меняется так:

#MaxThreadsPerHotkey 10
^1::
^2::
^3::
^4::
^5::
^r::
key := RegexReplace(A_ThisHotKey, "^.")
If AlreadyRun
   return
AlreadyRun := 1
While GetKeyState("Ctrl", "P")
{
   If !key
      Continue
   if (key = "r")
      key := 23
   keys .= key
   key := ""
}
msgbox % keys
AlreadyRun := keys := ""
return

10 (изменено: martishlushka, 2016-11-10 18:08:53)

Re: AHK: Комбинация клавиш при зажатой кнопке

Malcev
Спасибо!  Скрипт с клавишей R работает так как нужно.

Если при зажатом пробеле нажимается клавиша, которая используется в комбинации, то он должен выполнить скрипт. А если  пробел нажат и опущен, то сработает как обычно.
Пробовал изменить код вместо

!3::  

сделал

 sc39 & 3::

и вместо

 Alt

написал

Space

Но в итоге выдает не тройку, а

c39 & 3

Если

 ~sc39 & 3::

тогда

 sc39 & 3

11

Re: AHK: Комбинация клавиш при зажатой кнопке

Замените:

key := RegexReplace(A_ThisHotKey, "^.")

на:

key := substr(A_ThisHotKey, StrLen(A_ThisHotKey))

12

Re: AHK: Комбинация клавиш при зажатой кнопке

Malcev
Спасибо!

13

Re: AHK: Комбинация клавиш при зажатой кнопке

Какое-то время буквы работали нормально, но пока их добавлял что-то сбилось. Оставил главную часть скрипта, все равно та же проблема осталась. При зажатии пробела и r высвечивает тройку вместо 23. Изменение значения не изменяет тройку. А с числами все нормально

#MaxThreadsPerHotkey 10
~sc39 & 1::
~sc39 & 2::
~sc39 & 3::
~sc39 & 4::
~sc39 & 5::
~sc39 & sc13::
key := substr(A_ThisHotKey, StrLen(A_ThisHotKey))
If AlreadyRun
   return
AlreadyRun := 1
While GetKeyState("sc39", "P")
{
  If sc39 & key
      Continue
	if (key = "sc13")  
		key := 23
   keys .= key
   key := "" 
}  
msgbox % keys 
AlreadyRun := keys := ""
return      

14 (изменено: Malcev, 2016-11-10 20:03:04)

Re: AHK: Комбинация клавиш при зажатой кнопке

#MaxThreadsPerHotkey 10
~sc39 & 1::
~sc39 & 2::
~sc39 & 3::
~sc39 & 4::
~sc39 & 5::
~sc39 & sc13::
key := RegexReplace(A_ThisHotKey, ".*\s")
if (key = "sc13")  
   key := 23
if (keys != "")
   return
While GetKeyState("sc39", "P")
{
   If !key
      Continue
   keys .= key
   key := ""                        
}  
msgbox % keys 
keys := ""
return

15

Re: AHK: Комбинация клавиш при зажатой кнопке

Malcev
Благодарю

16

Re: AHK: Комбинация клавиш при зажатой кнопке

Malcev
Приветствую,подскажите пожалуйста код:
что бы при зажатой ПКМ зажимались эта же ПКМ и пробел. при отжатой ПКМ, пробел и эта же ПКМ отжимались.

17

Re: AHK: Комбинация клавиш при зажатой кнопке

А в чем тут сложность?

RButton::
Send, {RButton down}{Space Down}
KeyWait, RButton
Send, {RButton Up}{Space Up}
return

18 (изменено: ypppu, 2016-11-29 17:59:36)

Re: AHK: Комбинация клавиш при зажатой кнопке

Malcev
Огромное спасибо! Ещё если можно, хотел бы уточнить, есть ли упрощённая альтернатива этому коду,и правильно ли он написан:

$tab::
	Send, {tab}
    If isKeyPressed := !isKeyPressed    
        SetTimer, SendA, 40            
    Else
    {
        SetTimer, SendA, Off           
        Send {LBUTTON Up}                    
	Send {Space Up} 
}
    KeyWait tab                      
    return

SendA:
    Send {LBUTTON Down}
    Send {Space Down}
    return

19

Re: AHK: Комбинация клавиш при зажатой кнопке

Код следует обрамлять тегом code.
И я в вашем коде ничего не понял.

20

Re: AHK: Комбинация клавиш при зажатой кнопке

Malcev
Извиняюсь, не знаю как делать теговое обрамление.
Код при однократном нажатии на таб, зажимает ЛКМ и пробел. После повторного однократного нажатия на таб, ЛКМ и пробел перестают удерживаться.

21 (изменено: Malcev, 2016-11-30 15:28:36)

Re: AHK: Комбинация клавиш при зажатой кнопке

http://forum.script-coding.com/help.php?section=bbcode
Вторая слева:
http://forum.script-coding.com/extensions/pun_bbcode/css/Oxygen/img/sprite.png

Tab::
toggle := !toggle
If toggle 
   Send, {RButton down}{Space Down}
Else
   Send, {RButton Up}{Space Up}
return