1

Тема: AHK: Переключение и удержание клавиши.


stateShift:=0
Shift::
	Sleep, 150
	GetKeyState, state, Shift, P;
	If state = U
	{
		If (stateShift=0)
		{
			send {Shift down}
			stateShift:=1
		}
		Else
		{
			send {Shift up}
			stateShift:=0
		}
	}
	Else
	{
		If (stateShift=0)
		{
			stateShift:=1
			send {Shift up}
		}
	}
Return

Что нужно:
Первое нажатие не удерживая клавишу -> клавиша зажата скриптом.
Второе нажатие не удерживая клавишу -> клавиша отжата скриптом.
Клавиша удерживается физически -> работает как обычная клавиша, но если была зажата скриптом,  то будет отпущена после физического отжатия клавиши.

Я не пойму как сделать физ. удержание, работает только как переключатель.

2

Re: AHK: Переключение и удержание клавиши.

Попробуйте так:

shiftState := 0
$Shift::
   KeyWait, Shift, 300
   if ErrorLevel {
      Send, {Shift Down}
      KeyWait, Shift
      Send, {Shift Up}
      shiftState := 0
   }
   else {
      if shiftState := !shiftState
         Send {Shift Down}
      else
         Send {Shift Up}
   }
   Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Переключение и удержание клавиши.

teadrinker

Спасибо за ответ, но к сожалению не работает. Если удерживать и потом отпустить физ кнопку клавиша остается нажатой, если удерживается скриптом зажать физ кнопку, то скрипт отпускает. В общем, просто как зажатый шифт клавиша не работает. Если это имеет какое-то значение, то скрипт нужен для Blender-а. Версия AHK 1.1.28

4

Re: AHK: Переключение и удержание клавиши.

Тогда так:

shiftState := 0
*$LShift::
*$RShift::
   key := SubStr(A_ThisHotkey, -5)
   Send, {%key% Down}
   KeyWait, %key%, T.3
   if ErrorLevel {
      KeyWait, %key%
      Send, {%key% Up}
      shiftState := 0
   }
   else if !(shiftState := !shiftState)
      Send {LShift Up}{RShift Up}
   Return
Seres пишет:

Версия AHK 1.1.28

Должно работать и с этой версией, но вообще предполагается, что выложенный на форуме код будет работать с самой свежей версией AHK (и не обязательно с предыдущими), так что лучше всегда обновляться.

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

5

Re: AHK: Переключение и удержание клавиши.

teadrinker

Благодарю! Все работает отлично.

6

Re: AHK: Переключение и удержание клавиши.

Можно в этой строчке

KeyWait, %key%, T.3

изменить T.3 на T.2 (на меньшее значение), чтобы успевало срабатывать при удержании.

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