Тема: AHK: Переменный хоткей
Возможно ли реализовать подобный хоткей?
mod1 = ! ;или Alt
mod2 = F1
%mod1% & %mod2%::
MsgBox Alt+F1
Return
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Возможно ли реализовать подобный хоткей?
mod1 = ! ;или Alt
mod2 = F1
%mod1% & %mod2%::
MsgBox Alt+F1
Return
Как вариант:
mod1 = !
mod2 = F1
Hotkey,% mod1 mod2, Button
Return
Button:
MsgBox Alt+F1
Return
Скажите пожалуйста, есть такой скрипт, действие от двойного нажатия. Можно ли сделать хоткей переменный?
Оригинал.
~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
Всё ещё актуально.
~hotkey1:
Это уже не клавиша а метка. лишние символы как ~ уже ошибка.
"~%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
Sgy-x2, избегайте избыточного цитирования.
Это предупреждение заранее? Если я вдруг решу процитировать предыдущие сообщение и сказать спасибо?
Это напоминание. Если захотите сказать "Всё ещё актуально", не цитируйте такое громоздкое сообщение целиком.
Вон оно что, я в обще пытался редактировать последние сообщение, но форум решил по другому. Или нажал не то, простите.
Просто не путайте "Ответить" и "Цитировать".
yalanne
Срабатывает при зажатии.
#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
Положить рядом с скриптом
#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
}
}
Можно больше двух нажатий делать.
yalanne
А как в одном скрипте сделать?
Команда Include Просто вставляет Содержимое другого скрипта в свой. При компиляции скрипт будет одним файлом.
Просто в место первой строчки вставь код.
yalanne
Ясно, спасибо.
yalanne
Возникла небольшая сложность, у меня почти все хоткеии читаются и пишутся в файл настроек, поэтому здесь необходимо задавать клавишу пройменной.
VariableH.Hkcombo("!F1" , "hotkey1",1)
Пробовал так, не сработало.
VariableH.Hkcombo(%modkey1% , "hotkey1",1)
Без процентов ведь надо.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться