76 (изменено: becauseim, 2016-01-06 00:10:32)

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

Malcev, к Вашему варианту из 69 поста хотелось бы добавить возможность дополнительно установить действие на зажатие, иными словами, если параметр KeyWait установлен только на клавишу f2, то при ее зажатии на 0,2 секунды проверяется только зажатие, если параметра не установлено, то при зажатии по-прежнему проверяется весь порядок заданных комманд и останавливается на последней (что уже реализовано).

Win10x64, AHK v1.1.25

77 (изменено: Malcev, 2016-01-06 04:35:35)

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

#InstallKeybdHook
#InstallMouseHook
Count := 0
f1::
f2::
push := ""
if (A_ThisHotkey = "f2")
{
   push := 1
   arr:=["1", "2", "3"]
}
if (A_ThisHotkey = "f1")
   arr:=["4", "5", "6"]
If (A_PriorKey != A_ThisHotkey)
   pushArr := "", count := 0
if (push = 1) or (count +1 = arr.Length())
{
   KeyWait, %A_ThisHotkey%, T0.2
   If ErrorLevel
   {
      if (push = 1)
      {
         ToolTip зажата
         push := ""
         KeyWait, %A_ThisHotkey%
         return
      }
      else
         pushArr := 1
   }
}
If (count = arr.Length())
{
   if (pushArr = 1)
   {
      pushArr := ""
      KeyWait, %A_ThisHotkey%
      return
   }
   else
      count := 0
}
gosub % arr[Count := Count*((A_PriorHotkey = A_ThisHotkey))+1]
return


1:
ToolTip 1
return
2:
ToolTip 2
return
3:
ToolTip 3
return
4:
ToolTip 4
return
5:
ToolTip 5
return
6:
ToolTip 6
return

78

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

Malcev, Спасибо! Не знаю, как правильно описать следующее положение, в общем, при зажатии заданной клавиши через раз проскакивает задача, установленная на эту клавишу по умолчанию. Т.е. если в этом скрипте в качестве мультизадачной я использую клавишу f2, то проскакивает команда на переименование выделенного в программе элемента, т.к. по умолчанию, на эту клавишу в программе установлена эта команда. Реально ли как-то обойти этот момент? Например, используя Ваш вариант из 69 поста, такого положения не возникает.

Win10x64, AHK v1.1.25

79 (изменено: Malcev, 2016-01-09 07:35:01)

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

А что за программа? У меня данный скрипт в эксплорере работает и при зажатой f2 не переименовывает.
Попробуйте запускать скрипт от админа.

80 (изменено: becauseim, 2016-01-09 22:27:29)

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

Malcev, не знаю, как запустить от админа. А программа Vegas Pro, Вам знакома. При задержке клавиши на выделенном фрагменте видео, пытается его переименовать. Конечно, я могу убрать клавишу из стандартных настроек программы, но хотелось бы ограничиться средствами AHK.

Win10x64, AHK v1.1.25

81 (изменено: Malcev, 2016-01-10 18:12:07)

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

У меня скрипт 77 в в win8 в вегасе 13 при зажатии f2  ничего не переименовывает.
Запускать от админа - правая кнопка мыши run as administrator.

82

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

Malcev,  а при быстром нажатии на клавишу f2 у Вас не выполняется переименование? Потому что у меня при быстром нажатии стабильно выходит попытка переименовать фрагмент, даже после запуска упрощенного (без ф-ии задержания) скрипта 69 от администратора.

Win10x64, AHK v1.1.25

83

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

Нет, не выполняется.

84 (изменено: becauseim, 2016-01-12 05:52:18)

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

Malcev, понял, дело во внутренних скриптах Вегаса, выполнение которых я использую на нажатия клавиши. Заменил их на проверочные ToolTip'ы, попытка переименования не выходит. Реально ли как-то обойти этот момент средствами AHK?

К слову, скрипты вызываю с помощью WinMenuSelectItem.

Win10x64, AHK v1.1.25

85

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

Не знаю. С Вегасом знаком только поверхностно.

86

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

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

#SingleInstance Force
#InstallKeybdHook
#InstallMouseHook
1::
arr:=["1", "2", "3"]
if (A_TimeSincePriorHotkey < 50) and (A_TimeSincePriorHotkey != -1) and (count = arr.Length())
   return
If (A_PriorKey != A_ThisHotkey) or (count = arr.Length())
   count := 0
gosub % arr[Count := Count*((A_PriorHotkey = A_ThisHotkey))+1]
return

1:
2:
3:
ToolTip % a_thislabel
return

4:
MsgBox % a_thislabel
return

Такой вариант не подходит:

2:
gosub 4
ToolTip % a_thislabel
return
+ Для чего это нужно:

В следующем примере в результате зажатия горячей клавиши, как и задумывалось, выполнение сценария останавливается на последней метке:

1::
arr:= ["1", "2", "3"]
if (A_TimeSincePriorHotkey < 50) and (A_TimeSincePriorHotkey != -1) and (count = arr.Length())
   return
If (A_PriorKey != A_ThisHotkey) or (count = arr.Length())
   count := 0
gosub % arr[Count := Count*((A_PriorHotkey = A_ThisHotkey))+1]
return

1:
2:
3:
ToolTip % a_thislabel
return

А так в результате зажатия метки выполняются по кругу (где метка "Analyze" должна выполняться на ряду с меткой "1"):

1::
arr:= ["1", "2", "3"]
if (A_TimeSincePriorHotkey < 50) and (A_TimeSincePriorHotkey != -1) and (count = arr.Length())
   return
If (A_PriorKey != A_ThisHotkey) or (count = arr.Length())
   count := 0
gosub % arr[Count := Count*((A_PriorHotkey = A_ThisHotkey))+1]
gosub Analyze
return

1:
2:
3:
ToolTip % a_thislabel
return

Analyze:
MouseGetPos, FXClipX, FXClipY
ImageSearch, AnalyzeX, AnalyzeY, 0, 0, A_ScreenWidth, A_ScreenHeight, %A_ScriptDir%\Analyze.png
If ErrorLevel = 0
	MouseClick, , %AnalyzeX%, %AnalyzeY%, 1 ,0.5
MouseMove, %FXClipX%, %FXClipY%, 0.5
return
Win10x64, AHK v1.1.25

87

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

Мне лично ничего не понятно.
Почему не подходит GoSub?

88 (изменено: becauseim, 2016-06-07 19:23:24)

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

Malcev, в приведенном варианте каждое нажатие горячей клавиши переходит к определенной (одной) метке. Необходима возможность устанавливать неограниченное кол-во меток на каждое нажатие. При этом, по-прежнему, при зажатии горячей клавиши, сценарий должен пройти поочередно все метки и остановиться на последней.

Gosub не подходит, т.к. в моем случае будет множество дублирований практически одного и того же. Т.к. для каждой мультизадачной горячей клавиши будет необходимо создавать уникальные метки. Хотелось бы, чтобы метки универсально использовались для разных горячих клавиш.

Win10x64, AHK v1.1.25

89

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

Если брать за основу код из 69 поста, то можно так:

#SingleInstance Force
#InstallKeybdHook
#InstallMouseHook
Count := 0
f1::
arr:=["1,1_1,1_2", "2,2_1", "3"]
if (A_TimeSincePriorHotkey < 50) and (A_TimeSincePriorHotkey != -1) and (count = arr.Length())
   return
If (A_PriorKey != A_ThisHotkey) or (count = arr.Length())
   count := 0
array := arr[Count := Count*((A_PriorHotkey = A_ThisHotkey))+1]
loop, parse, array, `,
{
   gosub % A_LoopField
   sleep 500
}
return

1:
ToolTip % a_thislabel
return
1_1:
ToolTip % a_thislabel
return
1_2:
ToolTip % a_thislabel
return
2:
ToolTip % a_thislabel
return
2_1:
ToolTip % a_thislabel
return
3:
ToolTip % a_thislabel
return

90

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

Malcev, спасибо! Только при зажатии клавиши метки проверяются циклично. Необходимо остановится на последней, т.е. в данном случае, на метке "3".

Win10x64, AHK v1.1.25

91

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

#SingleInstance Force
#InstallKeybdHook
#InstallMouseHook
Count := 0
f1::
arr:=["1,1_1,1_2", "2,2_1", "3"]
If (A_PriorKey != A_ThisHotkey)
   count := 0
array := arr[Count := Count*((A_PriorHotkey = A_ThisHotkey))+1]
loop, parse, array, `,
{
   gosub % A_LoopField
   sleep 200
}
if (count  = arr.Length())
{
   count := 0
   KeyWait % A_ThisHotkey
   return
}
return

1:
ToolTip % a_thislabel
return
1_1:
ToolTip % a_thislabel
return
1_2:
ToolTip % a_thislabel
return
2:
ToolTip % a_thislabel
return
2_1:
ToolTip % a_thislabel
return
3:
ToolTip % a_thislabel
return

А зачем нужна эта строчка?

if (A_TimeSincePriorHotkey < 50) and (A_TimeSincePriorHotkey != -1) and (count = arr.Length())
   return

92

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

Malcev, спасибо, работает!

А зачем нужна эта строчка?

К сожалению, не знаю.

Win10x64, AHK v1.1.25

93 (изменено: becauseim, 2018-03-02 01:18:54)

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

Malcev, подскажите, пожалуйста, как добавить последний вариант в ф-ию? Ниже нерабочая попытка.

#SingleInstance Force

f2:: 
MultikeyReset("{vk4B}", "{vk44}+{5}+{9}+{3}", "{vk58}^+{vk41}")
return

MultikeyReset(arr1, arr2, arr3){
#InstallKeybdHook
#InstallMouseHook
   count := 0
arr:=[arr1, arr2, arr3]
If (A_PriorKey != A_ThisHotkey)
   count := 0
array := arr[Count := Count*((A_PriorHotkey = A_ThisHotkey))+1]
loop, parse, array, `,
{
   SendInput % A_LoopField
   sleep 200
}
if (count  = arr.Length())
{
   count := 0
   KeyWait % A_ThisHotkey
   return
}
}
return
Win10x64, AHK v1.1.25

94

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

Не подскажу, так как не понимаю, что вы хотите добиться и чем вас не устраивает вариант без функции.

95

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

Malcev, хочу назначить мультинажатие на множество клавиш, дабы не копировать многократно основную массу кода.

Win10x64, AHK v1.1.25

96

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

Используйте за основу код из 60 поста.

97

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

Malcev, он, по всей видимости, работает без учета нюансов, которые были описаны позже. Последний вариант невозможно заключить в ф-ию?

Win10x64, AHK v1.1.25

98

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

За компьютером буду нескоро. Можете попробовать вынести из функции переменную count в начало скрипта и обьявить ее глобальной. Ну и директивы тоже вынести.

99

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

Malcev, какие параметры данного скрипта являются директивами?

Win10x64, AHK v1.1.25

100

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

Директивы выделяются символом #.