1

Тема: AHK: Переменный хоткей

Возможно ли реализовать подобный хоткей?

mod1 = ! ;или Alt
mod2 = F1

%mod1% & %mod2%::
	MsgBox Alt+F1
Return

2 (изменено: SeaVodikendu, 2016-06-03 10:47:53)

Re: AHK: Переменный хоткей

Как вариант:

mod1 = !
mod2 = F1

Hotkey,% mod1 mod2, Button
Return

Button:
MsgBox Alt+F1
Return

3 (изменено: Sgy-x2, 2016-06-14 07:06:32)

Re: AHK: Переменный хоткей

Скажите пожалуйста, есть такой скрипт, действие от двойного нажатия. Можно ли сделать хоткей переменный?

Оригинал.

~Control::
if (A_PriorHotkey <> "~Control" or A_TimeSincePriorHotkey > 300)
{
	KeyWait, Control
	Return
}
KeyWait, Control
MsgBox, Test
Return

Пытался так, не работает.

modkey1 := Control
Hotkey, % modkey1, hotkey1
~hotkey1:
if (A_PriorHotkey <> "~%hotkey1%" or A_TimeSincePriorHotkey > 300)
{
	KeyWait, % hotkey1
	Return
}
KeyWait, % hotkey1
MsgBox, Test
Return

4 (изменено: ypppu, 2016-06-25 13:55:57)

Re: AHK: Переменный хоткей

Всё ещё актуально.

5 (изменено: yalanne, 2016-06-25 13:11:05)

Re: AHK: Переменный хоткей

Sgy-x2 пишет:

~hotkey1:

Это уже не клавиша а метка. лишние символы как ~ уже ошибка.

Sgy-x2 пишет:

"~%hotkey1%"

Так же метка не содержит значения как переменная.

Вот вариант:

modkey1 = !
modkey2 = F1
Hotkey,% modkey1 modkey2, hotkey1
Return

hotkey1:
if (A_ThisHotkey = A_PriorHotkey and A_TimeSincePriorHotkey < 300)
{
	MsgBox, Test
}

KeyWait, % A_ThisHotkey
Return

+ с комментами
modkey1 = !	; Первая клавиша alt
modkey2 = F1 ; Вторая клавиша F1
Hotkey,% modkey1 modkey2, hotkey1 ; В первый параметр заносим '!F1'. Второй параметр это название метки, куда скрипт будет ссылаться при нажатии кнопок указанных в первом параметре.
Return ; убираем лишнее срабатывание при старте скрипта. 

hotkey1: ; метка.
if (A_ThisHotkey = A_PriorHotkey and A_TimeSincePriorHotkey < 300) ; если текущая клавиша равна предыдущей и при этом прошло менее 300 мс, то срабатывает условие.
{
	MsgBox, Test
}

KeyWait, % A_ThisHotkey ; ждем отжатия клавиши. Это надо что бы избежать двойного нажатия при зажатии кнопки.
Return

6

Re: AHK: Переменный хоткей

Sgy-x2, избегайте избыточного цитирования.

7

Re: AHK: Переменный хоткей

Это предупреждение заранее? Если я вдруг решу процитировать предыдущие сообщение и сказать спасибо?

8

Re: AHK: Переменный хоткей

Это напоминание. Если захотите сказать "Всё ещё актуально", не цитируйте такое громоздкое сообщение целиком.

9 (изменено: Sgy-x2, 2016-06-25 16:24:36)

Re: AHK: Переменный хоткей

Вон оно что, я в обще пытался редактировать последние сообщение, но форум решил по другому. Или нажал не то, простите.

10

Re: AHK: Переменный хоткей

Просто не путайте "Ответить" и "Цитировать".

11

Re: AHK: Переменный хоткей

yalanne
Срабатывает при зажатии.

12 (изменено: yalanne, 2016-06-26 17:56:59)

Re: AHK: Переменный хоткей

#include VariableH.ahk


VariableH.Hkcombo("!F1"	,	"hotkey1",1)  ; Alt+F1(один раз) будет переход на метку hotkey1.
VariableH.Hkcombo("!F1"	,	"hotkey2",2) ; Alt+F1(два раза) будет переход на метку hotkey2.
VariableH.Hkcombo("+F1"	,	"hotkey3",2) ; Shift+F1(два раза) будет переход на метку hotkey3.

Return

hotkey1:
hotkey2:
hotkey3:
ToolTip % A_ThisLabel
return

+ VariableH.ahk

Положить рядом с скриптом

#Persistent
VariableH := new VariableH

Class VariableH
{
	Static List := {}
	
	Hkcombo(hk,LabelorFn="",pressed=1)
	{
		VariableH.List[hk "_" --pressed] := LabelorFn
		Hotkey,% hk, EventPressHk
	}
	
	PressHKCount(hk)
	{
		Loop 
		{
		   N++
		   KeyWait, %hk%, T.3
		   IfEqual,ErrorLevel,1,Break
		   KeyWait, %hk%, D T0.25
		} Until ErrorLevel
		KeyWait, %hk%
		Return N
	}

	_()
	{
	EventPressHk:
	CountP := VariableH.PressHKCount(	RegExReplace(	A_ThisHotkey,"^\W")),	CountP--
	
	if  VariableH.List[A_ThisHotkey "_" CountP ]
		if IsFunc(VariableH.List[A_ThisHotkey "_" CountP ])
			func(VariableH.List[A_ThisHotkey "_" CountP ] ).call()
		Else if IsLabel(VariableH.List[A_ThisHotkey "_" CountP ])
			Gosub % VariableH.List[A_ThisHotkey "_" CountP ]
	Return
	}
}

Можно больше двух нажатий делать.

13

Re: AHK: Переменный хоткей

yalanne
А как в одном скрипте сделать?

14 (изменено: yalanne, 2016-06-26 19:06:18)

Re: AHK: Переменный хоткей

Команда Include Просто вставляет Содержимое другого скрипта в свой. При компиляции скрипт будет одним файлом.
Просто в место первой строчки вставь код.

15

Re: AHK: Переменный хоткей

yalanne
Ясно, спасибо.

16

Re: AHK: Переменный хоткей

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

VariableH.Hkcombo("!F1"	,	"hotkey1",1)

Пробовал так, не сработало.

VariableH.Hkcombo(%modkey1%	,	"hotkey1",1)

17

Re: AHK: Переменный хоткей

Без процентов ведь надо.