1

Тема: AHK: Работа сценария в зависимости от нажатых клавиш

Необходимо назначить на нажатие сочентания клавиш ^{z} двойную команду Undo, т.е. ^{z 2}, но при условии, что перед этим было нажато сочетание клавиш +{f1} или +{f3}, пропуская при этом ряд клавиш, а именно {f1}, {f2}, {f3}, {f11}, {m}, {Space}.

Т.е. если я, например, нажимаю на сочетание кавиш +{f3}, после чего нажимаю повторно одну клавишу {f3}, либо не нажму ничего,  то последующее нажатие на ^{z} вызовет двойной шаг назад. В любых других случаях Undo должен работать в привычном режиме.

2

Re: AHK: Работа сценария в зависимости от нажатых клавиш

#SingleInstance,Force

#InstallKeybdHook
SetFormat,IntegerFast,h ; устанавливаем формат чисел в HEX
starttime:=a_tickcount

; исключения
except=0x10`,0x11`,0x12`,0x70`,0x71`,0x72`,0x7A`,0x4D`,0x20 ; виртуальные коды клавиш, для исключения из списка
;     shift  ctrl  alt    f1    f2    f3   f11    m   Space

Loop,0x91 ; перечисляем все виртуальные коды
{
  if instr(except,A_Index) ; за исключением списка
    continue ; продолжаем, не выполняя последующие строки
  Hotkey,% "~*vk" . A_Index,Label,On ; добавляем горячую клавишу на метку Label
}
SetFormat,IntegerFast,d

Label:
a=1
return

^vk5A:: ; ^z
if a
  tooltip,1 ; send,^{vk5A}
else
  tooltip,2 ; send,^{vk5A 2}
return

~+F1::
~+F3::
tooltip,0
a=0
return

!esc::
exitapp

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

3 (изменено: becauseim, 2016-05-29 16:01:52)

Re: AHK: Работа сценария в зависимости от нажатых клавиш

Alectric, Спасибо, работает! Однако решил пойти несколько иным путем, используя подсказки из других тем, чтобы иметь возможность добавлять различные условия для различных действий:

/*
[Section]
Undo=2
[End]
*/ 

IniRead, Undo, %A_ScriptFullPath%, Section, Undo

2::
Send, 1
Send, 2
IniWrite, % (Undo := 2), % A_ScriptFullPath, Section, Undo
return

3::
Send, 1
Send, 2
Send, 3
IniWrite, % (Undo := 3), % A_ScriptFullPath, Section, Undo
return

^vk5A:: ; z
SendInput ^{vk5A %Undo%}
Return

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

Поэтому, необходимо добавить условие, при котором значение Undo сбрасывается на "1", если после вызова сценария последовало нажатие любых клавиш, кроме: f1, f2, f3, Space, но не кроме +f1, ^f2 !Space и т.д. Также значение должно сбрасываться при удержании ЛКМ и ПКМ более чем на 0,1 сек., но не при обычном нажатии ЛКМ.

Помогите, пожалуйста, реализовать данное условие.