1

Тема: AutoHotkey: использование пробела в качестве модификатора

Пример демонстрирует замену следующих нажатий:

Space+A -> 7
Space+S -> 8
Space+D -> 9

Автоповтор пробела начнётся, если быстро нажать его второй раз и не отпускать.

#UseHook, On

vk41:: Print(7) ; Space+A -> 7
vk53:: Print(8) ; Space+S -> 8
vk44:: Print(9) ; Space+D -> 9

Space::
  If(r or !bs)
  {
    bs=1
    Send, {Space}
  }
  If(A_PriorHotkey="Space Up" && A_TimeSincePriorHotkey<300)
    r=1
Return

Space Up:: bs:=0, r:=0

Print(s)
{
  Global
  If GetKeyState("Space", "P")
    Send, {BS %bs%}%s%
  Else
    Send, {%A_ThisHotkey%}
  bs=0
}

Автор примера - YMP.

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

2 (изменено: NikVasKo, 2012-04-16 15:59:13)

Re: AutoHotkey: использование пробела в качестве модификатора

Помудрил над идеей, получилось такое. Пробел как модификатор дает обрабатывать и двойные нажатия. Например, прижав пробел и однажды нажав кнопку 4, получим "$", а дважды — ";". На мой взгляд  — удобно.

#UseHook, On
Space:: 
  If rep ;если разрешен повтор, при удержании посылать автопробелы 
    Send, {Space}
  If A_PriorHotkey="Space Up" && A_TimeSincePriorHotkey<500
    rep=1 ;разрешаем автоповтор после нажатия двойного пробела
Return
                                                 
Space Up:: ;по отпускании пробела посылаем нужный символ
  Send, % lit ? lit : "{Space}"
  lit =
  rep:=0
Return
#UseHook, Off
                      
sp(s,ss="") ; при нажатом пробеле, назначает символы на одинарное и двойное нажатия 
{ Global
   If GetKeyState("Space", "P") ;если пробел не отпущен, запоминаем...
      (A_PriorHotkey = "Space") ? lit:=s  ; ...символ одного нажатия 
    : (A_PriorHotkey = A_ThisHotkey)? lit:=ss ; ...символ двух нажатий 
  Else
    Send, {%A_ThisHotkey%} ;если пробел не нажат, шлём штатный символ 
}

Вот пример настройки клавиш верхнего ряда.

sc029::sp("``","~")
sc002::sp("{!}"," := ")
sc003::sp("@","""")
sc004::sp("{#}","{ASC 0176}C")
sc005::sp("{$}",";")
sc006::sp("{%}","{%}")
sc007::sp("{^}",":")
sc008::sp("{&}","?")
sc009::sp("{*}","{ASC 0149}")
sc00A::sp("(","()")
sc00B::sp(")","(){Left}")
sc00C::sp(" {ASC 0151} ","_")
sc00D::sp("{+}","{ASC 0177}") 
sc02B::sp("/","|")