1

Тема: AHK: Задание условия на нажатие клавиши

Извиняюсь за корявое описание, но буду признателен подсказке, как задать действие на двойное нажатие клавиши, если одиночное нажатие этой же клавиши уже используется в качестве горячей клавиши, а также задать условие на нажатие клавиши?
Что требуется:

При нажатии F2 отправить команду нажатия клавиши F2

F2:: Send, {F2}

Если в течении двух секунд после этого мною повторяется нажатие клавиши F2 , то отправить еще одно сочетание клавиш, а именно:

Send, {ctrl down}{shift down}{]}{shift up}{ctrl up}{e}
Win10x64, AHK v1.1.25

2

Re: AHK: Задание условия на нажатие клавиши

$F2:: Send % (A_PriorHotkey = A_ThisHotkey)&&(A_TimeSincePriorHotkey<2000) ? "{ctrl down}{shift down}{]}{shift up}{ctrl up}{e}" : "{F2}"

3 (изменено: becauseim, 2015-08-29 01:39:46)

Re: AHK: Задание условия на нажатие клавиши

Круто! Работает! Большое спасибо!

Win10x64, AHK v1.1.25

4 (изменено: becauseim, 2015-08-29 01:39:32)

Re: AHK: Задание условия на нажатие клавиши

А скажете, как к такой форме добавить третье поочередное нажатие клавиши F2 для отправки нового сочетания клавиш в течение тех же двух секунд, но с момента второго нажатия?

Win10x64, AHK v1.1.25

5

Re: AHK: Задание условия на нажатие клавиши

becauseim, не нужно бессмысленно цитировать предыдущий пост.

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

6 (изменено: becauseim, 2015-08-29 01:40:05)

Re: AHK: Задание условия на нажатие клавиши

Согласен. Делаю это потому, что не нахожу кнопки "Ответить" (Пользователю).

Win10x64, AHK v1.1.25

7

Re: AHK: Задание условия на нажатие клавиши

becauseim, если вы не поняли, я к тому, что если будете продолжать так делать, получите бан. Кнопка «Ответить» находится под последним постом ветки. Хотите ответить кому-то конкретно, обращайтесь по нику.

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

8 (изменено: Irbis, 2015-08-29 02:28:26)

Re: AHK: Задание условия на нажатие клавиши

Заранее отвечу и про 4ое, и про 5ое подряд нажатия.

Count := 0, Period := 2000 ; 2сек.
Arr:= ["{F2}", "{ctrl down}{shift down}{]}{shift up}{ctrl up}{e}", "{F10}"]
$F2:: Send % Arr[Count := Count*((A_PriorHotkey = A_ThisHotkey)&&(A_TimeSincePriorHotkey<Period))+1]

9 (изменено: becauseim, 2015-08-29 02:18:28)

Re: AHK: Задание условия на нажатие клавиши

Извиняюсь, а в которую область внести тот набор клавиш, который будет отправляться при третьем клике?
И почему-то в новом варианте требуемая операция перестала работать. Как с первым нажатием, так и со вторым.

Win10x64, AHK v1.1.25

10 (изменено: Irbis, 2015-08-29 02:22:04)

Re: AHK: Задание условия на нажатие клавиши

Вместо "{F10}".
Вторая строка - просто пример, можно удалить. При ее использовании посылаются клавиши 1,2,3... в любое поле ввода, например в блокнот. Не забудь раскомментировать 3ю строчку.

11

Re: AHK: Задание условия на нажатие клавиши

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

Win10x64, AHK v1.1.25

12

Re: AHK: Задание условия на нажатие клавиши

Внес необходимые параметры, почему-то не работает.

Count := 0, Period := 2000 ; 2сек.
Arr:= ["{F2}", "{shift down}{f2}{shift up}", "{ctrl down}{shift down}{]}{shift up}{ctrl up}{e}"]
$F2:: Send % Arr[Count := Count*((A_PriorHotkey = A_ThisHotkey)&&(A_TimeSincePriorHotkey<Period))+1]
Win10x64, AHK v1.1.25

13

Re: AHK: Задание условия на нажатие клавиши

{F10} не во второй строке, а в третьей. А Ваши сочетания (были) закомментированы, потому что мне не на чем проверить ваше "шаманство", вот и проверяю в блокноте работу скрипта. Исправил код в посте#8, чтоб он вас не сбивал с толку.

14 (изменено: becauseim, 2015-08-29 02:33:06)

Re: AHK: Задание условия на нажатие клавиши

Irbis пишет:

не на чем проверить

Понял, извиняюсь. Тем не менее, сценарий не работает после ввода необходимых в него параметров, к сожалению. Что-то стоит поправить?

Win10x64, AHK v1.1.25

15 (изменено: Irbis, 2015-08-29 02:50:10)

Re: AHK: Задание условия на нажатие клавиши

У меня работает  на примере ТоталКоммандера с различными вариантами Ctrl + Shift + F1...F10.
А зачем эти сложности с {shift down}{f2}{shift up}, если можно  +{F2} ?

Попробуй такой вариант:

Count := 0, Period := 2000 ; 2сек.
Arr:= ["{F2}", "+{F2}", "^+{]}{e}"]
$F2:: SendInput % Arr[Count := Count*((A_PriorHotkey = A_ThisHotkey)&&(A_TimeSincePriorHotkey<Period))+1]

Возможно, для правильной работы 3го сочетания, вне зависимости от раскладки клавиатуры, нужно будет использовать виртуальные коды клавиш, а не {]}{e}.

16

Re: AHK: Задание условия на нажатие клавиши

Опять же извиняюсь, перенес в отдельный файл ahk, заработало! Видимо конфликтовал в файле с остальными сриптами.
Записываю так, как мне подсказывает Macro Creator. Все-таки я лишь любитель скриптов, делаю ошибки. Возьму на заметку!

Win10x64, AHK v1.1.25

17

Re: AHK: Задание условия на нажатие клавиши

Irbis, столкнулся с проблемой. На основе Вашего сценария набрал две задачи на две разные горячие клавиши, разместив их в одном файле AHK. Работает только одна из них (первая), вторая же только при условии размещения и запуска ее в отдельном файле. Можно ли это как-то исправить?


Count := 0, Period := 1100
f6:= ["!{o}{r}{t}", "!{o}{r}{a}"]
$F6:: SendInput % f6[Count := Count*((A_PriorHotkey = A_ThisHotkey)&&(A_TimeSincePriorHotkey<Period))+1]

Count := 0, Period := 1100
f10:= ["{!{t 2}{c}", "!{o}{k 2}{enter}{tab 3}"]
$F10:: SendInput % f10[Count := Count*((A_PriorHotkey = A_ThisHotkey)&&(A_TimeSincePriorHotkey<Period))+1]
Win10x64, AHK v1.1.25

18

Re: AHK: Задание условия на нажатие клавиши

becauseim, раз у вас 2 хоткея, для каждого должен быть свой счетчик нажатий. И если клавиша не отсылает саму себя, т.е. при нажатии F10 не предусмотрен посыл F10, то "$" перед ней можно не ставить.

Count1 := 0, Count2 := 0, Period := 1100
f6:= ["!{o}{r}{t}", "!{o}{r}{a}"]
f10:= ["{!{t 2}{c}", "!{o}{k 2}{enter}{tab 3}"]

F6:: SendInput % f6[Count1 := Count1*((A_PriorHotkey = A_ThisHotkey)&&(A_TimeSincePriorHotkey<Period))+1]
F10:: SendInput % f10[Count2 := Count2*((A_PriorHotkey = A_ThisHotkey)&&(A_TimeSincePriorHotkey<Period))+1]

19

Re: AHK: Задание условия на нажатие клавиши

Irbis, хотел бы развить для себя эту полезную функцию, т.е. хотел бы узнать, как должен выглядеть скрипт, если, например, по первому нажатию отправляется сочетание клавиш, а по второму ControlClick или другая операция?

Win10x64, AHK v1.1.25

20

Re: AHK: Задание условия на нажатие клавиши

Count1 := 0, Count2 := 0, Period := 1100
f10:= ["{!{t 2}{c}", "!{o}{k 2}{enter}{tab 3}"]
F10:: SendInput % f10[Count2 := Count2*((A_PriorHotkey = A_ThisHotkey)&&(A_TimeSincePriorHotkey<Period))+1]

Также оказалось необходимым добавить отдельную метку (SinglePress:, DoublePress:) к каждому действию в отдельности (действие по одинарному нажатию и по двойному), чтобы добавить соответствующие пункты в меню скрипта в трее. Надеюсь, кто-то подскажет, как это сделать.

Win10x64, AHK v1.1.25

21 (изменено: serzh82saratov, 2015-10-21 22:20:41)

Re: AHK: Задание условия на нажатие клавиши

Для любого количества клавиш и количества нажатий.
Ещё (возможно) плюс от предыдущего метода, что хоткеи не "скидывают" счётчики других хоткеев.


#UseHook
Delay := 1100
Arr := {1:{"LabelName":"Odin"}
        , "vk51":{LabelName:"Q"}}
        
For key in Arr 
{
    Hotkey, %key%, Work
    Arr[key][Count] := 0
}
Return

Work: 
    Arr[A_ThisHotkey][Count] := (A_TickCount - (Arr[A_ThisHotkey]["Time"]) < Delay) ? (Arr[A_ThisHotkey][Count] + 1) : 1
    Arr[A_ThisHotkey]["Time"] := A_TickCount 
    ; Раскоментировать, если при превышении лимита меток надо сразу запускать первую (зациклить).
    ; IsLabel(Arr[A_ThisHotkey]["LabelName"] "_" Arr[A_ThisHotkey][Count]) ? 0 : (Arr[A_ThisHotkey][Count] := 1)
    Try Gosub, % Arr[A_ThisHotkey]["LabelName"] "_" Arr[A_ThisHotkey][Count]
    Return
    
Odin_1:
Odin_2:
Odin_3:
Odin_4:
Q_1:
Q_2:
Q_3:
    ToolTip % A_ThisLabel
    Return
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

22

Re: AHK: Задание условия на нажатие клавиши

К сожалению, без комментариев не понял, куда необходимо записывать значения переменных и где вставлять метки. Полагаю, это решение обоих вопросов? Т.е. как добавить вместо отправления клавиш иную команду и как добавить метки для каждой команды в отдельности. Могли бы Вы отредактировать его под конкретный пример? Например:
Одинарное нажатие на клавишу 1:

SinglePress:
Send ^+{Esc}

Двойное нажатие на клавишу 1:

DoublePress:
MsgBox, Hello!

Метки необходимы, чтобы создать для каждой команды отдельный пункт в TrayMenu.

Win10x64, AHK v1.1.25

23 (изменено: serzh82saratov, 2015-10-22 22:22:20)

Re: AHK: Задание условия на нажатие клавиши


#UseHook
Delay := 1100
Arr := {1:{"Label":"Odin"}}
        
For key in Arr  {
    Hotkey, %key%, Work
    Arr[key]["C"] := 0
}
Return

Work: 
    o := Arr[A_ThisHotkey], o["C"] := A_TickCount - o["T"] < Delay ? o["C"] + 1 : 1 
    o["T"] := A_TickCount, IsLabel(o["Label"] "_" o["C"]) ? 0 : (o["C"] := 1)
    Try Gosub, % o["Label"] "_" o["C"]
    Return
    
Odin_1:
    Send ^+{Esc}
    Return
    
Odin_2:
    MsgBox,,,Hello!,0.3
    Return
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

24

Re: AHK: Задание условия на нажатие клавиши

serzh82saratov, Спасибо! Так понимаю, здесь уже исключена возможность включения/выключения цикличности, аналогично первому примеру? И самое главное, у меня не получилось задать несколько клавиш на основе Вашего кода в одном скрипте. Пробовал для другой клавиши менять названия Arr и Work, к сожалению, не получилось.

Win10x64, AHK v1.1.25

25

Re: AHK: Задание условия на нажатие клавиши

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

Всё также как и в 21 посте.


#UseHook
Delay := 1100
Arr := {1:{"Label":"Odin"}
        , "+vk51":{"Label":"Shift+Q"}}
        
For key in Arr  {
    Hotkey, %key%, Work
    Arr[key]["C"] := 0
}
Return

Work: 
    o := Arr[A_ThisHotkey], o["C"] := A_TickCount - o["T"] < Delay ? o["C"] + 1 : 1 
    IsLabel(o["Label"] "_" o["C"]) ? (o["T"] := A_TickCount) : 0
    ; Раскоментировать, если при превышении лимита меток надо сразу запускать первую (зациклить). 
    ; И закомментировать строку выше.
    ; o["T"] := A_TickCount, IsLabel(o["Label"] "_" o["C"]) ? 0 : (o["C"] := 1) 
    Try Gosub, % o["Label"] "_" o["C"]
    Return
    
Odin_1:
    Send ^+{Esc}
    Return
    
Odin_2:
    MsgBox,,,Hello!,0.3
    Return

Shift+Q_1: 
    MsgBox,,,Shift+Q 1,0.3
    Return
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).