1 (изменено: Hollisch, 2016-01-06 12:36:54)

Тема: AHK: Остановка цикла при нажатии на любые клавиши кроме определенных

Добрый день! И вновь я к вам за помощью.
Есть цикл повтора нажатий правой кнопки мышки, пока Rbutton зажата.

*$Rbutton::
	Loop
	{
		If GetKeyState("RButton", "P") = 0
		Break
		Send, { RButton }
		Sleep, 15
	}

Нужно:
а) что бы при нажатии на любую клавишу (кроме указанных в пункте б) клавиатуры цикл прерывался. (повторный запуск цикла, только при новом нажатии на правую кнопку мыши)
б) клавиши q, w, e, a, s, d не прерывали бы его.

Просьба разъяснить один момент:
Изначально я хотел сделать в теле цикла проверки GetKeyState для всех клавиш, которые останавливали бы его, но возник вопрос: так как, проверка вызывалась бы из цикла, а не при нажатии на клавишу, возможна ли небольшая десинхронизация по времени остановки цикла?
Или она будет настолько мала, что ее просто невозможно заметить человеку?
Исходя из данного вопроса, прошу привести пример кода, каким методом можно:
цикл, вызванный нажатием одной клавиши, остановить нажав на другую.

2

Re: AHK: Остановка цикла при нажатии на любые клавиши кроме определенных

Global WhileRB
OnExit, Exit
hHookKeybd := DllCall("SetWindowsHookEx", Int, WH_KEYBOARD_LL := 13
   , Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
   , Ptr, DllCall("GetModuleHandle", UInt, 0, Ptr)
   , UInt, 0, Ptr)
Return

Exit:
   DllCall("UnhookWindowsHookEx", Ptr, hHookKeybd)
   ExitApp

LowLevelKeyboardProc(nCode, wParam, lParam)
{
   static vk
   vk := format("vk{:x}", NumGet(lParam + 0, "UInt") )  
   
   SetTimer, EventHandling, -1
   Return DllCall("CallNextHookEx", Ptr, 0, Int, nCode, Ptr, wParam, Ptr, lParam)
   
EventHandling:
if !(vk ~= "^(vk51|vk57|vk45|vk41|vk53|vk44)$")
  WhileRB := 0
return 
}

RButton::
WhileRB := 1
While GetKeyState("RButton","p") and WhileRB
 {
   Send, { RButton }
   Sleep, 15
 }
KeyWait RButton
return

3

Re: AHK: Остановка цикла при нажатии на любые клавиши кроме определенных

Cпасибо yalanne, все работает как часы. Если не сложно, хотелось бы комментарий к данной строке:

if !(vk ~= "^(vk51|vk57|vk45|vk41|vk53|vk44)$")

Суть ясна, но "прочесть и понять" не могу, трудно дается такое количество операторов.

4

Re: AHK: Остановка цикла при нажатии на любые клавиши кроме определенных

  • '~=' - Это сокращенный вариант функции RegExMatch(). Но в отличии от этой функции Этот оператор принимает только Haystack(Слева. То место где будет искать) и NeedleRegEx (Справа. Шаблон по которому будет поиск). Шаблон указывается в двойных кавычках.

  • В RegEx символ '^' означает что поиск будет с начала строки.

  • Дальше идут круглые скобки '()' с помощью их можно указать группу символов. Знак вертикального разделения '|' служит в RegEx оператором 'ИЛИ'. Через | перечисляются нужные клавиши в виде Virtual-Keyc префиксом vk.

  • '$' Значит что это конец строки и после него не чего не может быть.

  • В переменной vk содержится Virtual-Key последней нажатой клавиши с префиксом vk. Если эта переменная содержит тот vk код что есть справа то условие истина.

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

5

Re: AHK: Остановка цикла при нажатии на любые клавиши кроме определенных

Премного благодарен, это даже больше, чем то на что я надеялся. Спасибо.

6 (изменено: Hollisch, 2016-01-14 01:47:43)

Re: AHK: Остановка цикла при нажатии на любые клавиши кроме определенных

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


1) Мне нужно, что бы повтор правой клавиши мыши работал при зажатом контроле(левом). Я пытался добавить его в список "клавиш исключений", но по непонятной мне причине скрипт не воспринимает его виртуальный код и все равно прерывает цикл.

2) И второе, посложнее. Касательно самого цикла повтора правой клавиши:
Как сделать, что бы при нажатии на q,w,e,a,s,d цикл бы приостанавливался, но при нажатии на левую кнопку мыши - возобновлялся. При том, что бы данные клавиши и левый клик отправляли бы сами себя, единожды за нажатие, без повтора при зажатии.

Если смотреть в контексте данной темы - этот вопрос выглядит глупо, ведь есть пример, по аналогии с которым можно добиться нужного результата, но нет, у меня не выходит, сколько бы я не пытался, за сим прошу помощи в данном вопросе.

7

Re: AHK: Остановка цикла при нажатии на любые клавиши кроме определенных

1)

  • А вот если например во время цикла отпустить ctrl, то какое действие должно произойти? Полная остановка цикла?

  • Должно это как то повлиять на второй пункт?

2)

  • После нажатия клавиш q-d должно идти ожидание левой кнопки. После того как л.кнопка нажата скрипт должен повторно отправить ту клавишу которая вызвала ожидание л.кнопки, затем как клавиша от q-d отправлена ждать отжатие левой кнопки?

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

  • Нужен ли какой нибудь лимит времени ожидания левой кнопки мыши?

  • Правая кнопка мыши должна быть зажата все это время?
    Или же во время ожидания левой кнопки мыши правую можно отпустить?

  • И связанный вопрос из певого пункта,второго подпункта. Если отжать ctrl то все просто должно отключится? Не чего не будет ждать все просто перейдет в стандартное положение?

8

Re: AHK: Остановка цикла при нажатии на любые клавиши кроме определенных

yalanne
Да, мне стоило более подробно расписать задачу, но время было позднее, а после битвы с ahk 'думалка' была похожа на плавленный сырок. Итак:

По поводу контрола: в контексте скрипта написанного Вами выше я пытался добавить его в список "клавиш исключений", которые не прерывали бы скрипт. что собственно у меня не вышло.
А по логике - выходит, что мы его просто не трогаем, он работает в обычном режиме и не прерывает скрипт.


Попробую объяснить работу приложения, возможно так будет проще.
Действие в приложении выполняется нажатием клавиш q-d и последующим нажатием на ЛКМ,
ПКМ - отвечает на "навигацию", положение курсора.
Условия таковы, что если я нажимаю на q-d, но потом жму на ПКМ для перемещения курсора, то при последующем нажатии на ЛКМ действие не будет произведено, так как ПКМ отменяет нажатия на q-d, и нужно заново нажимать на них и далее на ЛКМ.
И второе условие, двойное нажатие на любую из клавиш q-d вызывает другое действие.
(Последнее условие в работе скрипта не участвует, важно только что бы двойных нажатий на q-d скрипт не производил ни при каких условиях).

Мне нужно, что бы я мог держать зажатой правую клавишу, управляя положением курсора посредством цмкла повтора нажатий ПКМ, но при нажатии на q-d, этот цикл бы прекращался, и возобновлялся только после нажатия на ЛКМ или нового нажатия на ПКМ.
( И соответственно, если ни была нажата ни одна из клавиш q-d, то просто отжатие ПКМ привет к остановке цикла тоже )

Алгоритм таков: ( на примере клавиши 'q' )
Если ПКМ удерживается в нажатом состоянии (выполняется цикл повтора нажатий), то:
- Нажатие на 'q' вызывает сначала остановку этого цикла, а затем отправляет сама себя, далее идет ожидание:
   а) либо ЛКМ, нажатие на которую приведет к действию в приложении и затем, через             небольшой промежуток времени, например 400мс, возобновит повтор цикла нажатий ПКМ,
при условии, что ПКМ все еще находится в нажатом состоянии).
   б) либо ПКМ, новое нажатие на которую возобновляет цикл, если он приостановлен. (само же нажатие q-d отменяется приложением, так что здесь все просто)
   г) если после нажатия на q-d ПКМ была отпущена, то это ничего не меняет, цикл на уже находится в режиме паузы, а скрипт ожидает нажатия на ЛКМ или ПКМ.


Нужен ли какой нибудь лимит времени ожидания левой кнопки мыши?
Нет, лимит не нужен, ожидаем нажатие на ЛКМ или ПКМ.

Правая кнопка мыши должна быть зажата все это время?
Или же во время ожидания левой кнопки мыши правую можно отпустить?
Во время ожидания - ПКМ может быть как отпущена, так и все еще зажата (просто в случае, если она зажата, чисто физически можно будет нажать только ЛКМ, но это не имеет значения).



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

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

9

Re: AHK: Остановка цикла при нажатии на любые клавиши кроме определенных

Вроде все учел:

Global WhileRB := 0
OnExit, Exit
hHookKeybd := DllCall("SetWindowsHookEx", Int, WH_KEYBOARD_LL := 13
   , Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
   , Ptr, DllCall("GetModuleHandle", UInt, 0, Ptr)
   , UInt, 0, Ptr)
Return

Exit:
   DllCall("UnhookWindowsHookEx", Ptr, hHookKeybd)
   ExitApp

LowLevelKeyboardProc(nCode, wParam, lParam)
{
   static vk
   vk := format("vk{:x}", NumGet(lParam + 0, "UInt") )  
   
   SetTimer, EventHandling, -1
   Return DllCall("CallNextHookEx", Ptr, 0, Int, nCode, Ptr, wParam, Ptr, lParam)
   
EventHandling:
if (vk = "vka2")
 return
if (WhileRB=1)
 if (vk ~= "^(vk51|vk57|vk45|vk41|vk53|vk44)$")
  WhileRB := 2
 Else
  WhileRB := 0
return 
}


#if (WhileRB=0)
*RButton::
rest_loop:
WhileRB := 1
While GetKeyState("RButton","p") and (WhileRB=1)
 {
   tooltip { RButton }
   Send, { RButton }
   Sleep, 15
 }
KeyWait RButton
WhileRB := 0
return

#if (WhileRB=2)
~LButton::
sleep 400
Gosub rest_loop
KeyWait LButton
return
#if

10 (изменено: Hollisch, 2016-01-16 01:44:30)

Re: AHK: Остановка цикла при нажатии на любые клавиши кроме определенных

Спасибо Вам большое yalannne за быстрый ответ. Скрипт опробовал, работает, но не в полной мере.
1) Возобновление повтора правой клавиши происходит только единожды, пока зажата правая клавиша, при последующих нажатиях q-d + ЛКМ цикл не возобновляется. Это скорее моя ошибка, я не уточнял этот момент, хотя алгоритм-то верный...
Решил проверить на значение WhileRB на всех этапах, первое что пришло в голову tooltip %WhileRB%, получилось, что при повторном нажатии на q-d и ЛКМ (при зажатой ПКМ) значение остается 2.

2) При нажатии на контрол появилась непонятная задержка, примерно секунда до того, как действие контрол+клик ПКМ (а в данном случае наш цикл) будет применено.

11 (изменено: yalanne, 2016-01-19 13:35:26)

Re: AHK: Остановка цикла при нажатии на любые клавиши кроме определенных

Global vkHK
OnExit, Exit
hHookKeybd := DllCall("SetWindowsHookEx", Int, WH_KEYBOARD_LL := 13
   , Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
   , Ptr, DllCall("GetModuleHandle", UInt, 0, Ptr)
   , UInt, 0, Ptr)
Return

Exit:
   DllCall("UnhookWindowsHookEx", Ptr, hHookKeybd)
   ExitApp

LowLevelKeyboardProc(nCode, wParam, lParam)
{
   vkHK := format("vk{:x}", NumGet(lParam + 0, "UInt") )  
   Return DllCall("CallNextHookEx", Ptr, 0, Int, nCode, Ptr, wParam, Ptr, lParam)
}

*RButton::
rest_loop:
StatusKey := 0
vkHK := ""
While GetKeyState("RButton","p")
 {
   if vkHK and (vkHK != "vka2")
   {
     if vkHK ~= "^(vk51|vk57|vk45|vk41|vk53|vk44)$"
	  StatusKey := 1
	 else
	  StatusKey := 2
	 break
   }
	
   ToolTip {RButton}
   vkHK := ""
   Sleep, 15
   
 }
 
E := 0
 if (StatusKey = 2)
   return
 if (StatusKey = 1)
   loop
   {
     KeyWait,LButton,T0.01
	 % (ErrorLevel = 1) and (E:=1)
	 KeyWait,RButton,D T0.01
	 % (ErrorLevel = 1) and (E:=2)
   } Until E
   
if E = 1
{
  sleep 400
  goto rest_loop
}
return

Tooltip надо будет на send заменить.

12 (изменено: Hollisch, 2016-01-20 20:39:27)

Re: AHK: Остановка цикла при нажатии на любые клавиши кроме определенных

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

Проще плюнуть и забыть как страшный сон, сил уже нет каждый вечер на это время тратить.

13 (изменено: Alectric, 2016-01-20 23:15:44)

Re: AHK: Остановка цикла при нажатии на любые клавиши кроме определенных

SetFormat, IntegerFast, h

except=0x1`,0x2`,0x4`,0x5`,0x6`,0x51`,0x57`,0x45`,0x41`,0x53`,0x44

Loop, 0xFF
{
  if instr(except,A_Index)
    continue
  Hotkey,% "~*vk" . A_Index,Label,On
}
Hotkey,~*del,Label,On
Hotkey,~*up,Label,On
Hotkey,~*Down,Label,On
Hotkey,~*left,Label,On
Hotkey,~*right,Label,On
Hotkey,~*ins,Label,On
Hotkey,~*home,Label,On
Hotkey,~*end,Label,On
Hotkey,~*pgup,Label,On
Hotkey,~*pgdn,Label,On

Label:
AnyKey=1
return

$vk51::
$vk57::
$vk45::
$vk41::
$vk53::
$vk44::
k:=regexreplace(a_thishotkey,"\$")
send,{%k% down}
keywait,%k%,L
return

$vk51 up::
$vk57 up::
$vk45 up::
$vk41 up::
$vk53 up::
$vk44 up::
k:=regexreplace(a_thishotkey,"\$")
send,{%k%}
keywait,%k%,L
return

*$Rbutton::
AnyKey=0
while GetKeyState("RButton","P")
{
  if AnyKey
  {
    if GetKeyState("LButton","P")
    {
      sleep,390
      AnyKey=0
    }
    sleep,10
    continue
  }
;  Send, {RButton}
  tooltip,% A_Index
  Sleep, 15
}
return

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

14

Re: AHK: Остановка цикла при нажатии на любые клавиши кроме определенных

Alectric, не знаю как скрыть свое удивление, но в данном варианте основную задачу скрипт выполняет на 'ура', в каком порядке и с какой-бы скоростью я не кликал. Спасибо Вам огромное.
Код и алгоритм я конечно внимательно изучу, все таки хочется понять как это работает, за сим есть две просьбы:
1) Могли бы вы оставить комментарии к коду?
2) В вашем варианте клавиши модификаторы (ctrl, alt, space и др.) прерывают цикл повтора ПКМ, как мне сделать, что бы ctrl данный цикл не прерывала?

15

Re: AHK: Остановка цикла при нажатии на любые клавиши кроме определенных

1) Вечером.
2) Добавь вирткод в список "except", для ctrl - 11.

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

16

Re: AHK: Остановка цикла при нажатии на любые клавиши кроме определенных

Alectric
1) Хорошо.
2) Если добавить только 0x11 - цикл все равно прерывается, если добавить 0xa2 - аналогично, но если добавить оба, то работает, но есть одно но(!):
При нажатии на контрол (ПКМ в этот момент зажата и выполняется цикл) - клик с учетом модификатора происходит не сразу, а спустя примерно полсекунды.
И далее если удерживать контрол и ПКМ - ситуация повторяется, только один-два клика за секунду отправляются так, как будто контрол зажат, все остальные - просто повтор ПКМ.
Ранее я уже столкнулся с этой проблемой, но решить не сумел, возможно, Вы что-нибудь подскажите.

17 (изменено: Alectric, 2016-01-22 13:55:42)

Re: AHK: Остановка цикла при нажатии на любые клавиши кроме определенных

1)

SetFormat,IntegerFast,h ; устанавливаем формат чисел в HEX

; исключения
except=0x11`,0x1`,0x2`,0x4`,0x5`,0x6`,0x51`,0x57`,0x45`,0x41`,0x53`,0x44

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

; перечисляем дополнительные клавиши, которые, почему-то, не добавляются по вирткоду, туда же
Hotkey,~*del,Label,On
Hotkey,~*up,Label,On
Hotkey,~*Down,Label,On
Hotkey,~*left,Label,On
Hotkey,~*right,Label,On
Hotkey,~*ins,Label,On
Hotkey,~*home,Label,On
Hotkey,~*end,Label,On
Hotkey,~*pgup,Label,On
Hotkey,~*pgdn,Label,On

Label: ; тут все понятно, думаю
AnyKey=1
return

; делаем нужные клавиши "однокликовыми"(одно зажатие - один посыл), как ты описывал
$vk51::
$vk57::
$vk45::
$vk41::
$vk53::
$vk44::
k:=regexreplace(a_thishotkey,"\$")
send,{%k% down}
keywait,%k%,L ; ждем отпускания
return

$vk51 up::
$vk57 up::
$vk45 up::
$vk41 up::
$vk53 up::
$vk44 up::
k:=regexreplace(a_thishotkey,"\$")
send,{%k%}
return

*$Rbutton::
AnyKey=0 ; обнуляем переменную ("либо ПКМ, новое нажатие на которую возобновляет цикл")
while GetKeyState("RButton","P") ; пока зажата кнопка - цикл работает
{
  if AnyKey ; если в AnyKey единица
  {
    if GetKeyState("LButton","P") ; если нажали на ЛКМ
    {
      sleep,390 ; ждем 400 ms
      AnyKey=0 ; обнуляем anykey и цикл продолжается
    }
    sleep,10 ; спим чтобы не нагружать проц
    continue ; продолжаем, не выполняя последующие строки
  }
;  Send, {RButton} ; посылаем нажатие
  tooltip,% A_Index ; для отладки
  Sleep, 15 ; спим чтобы не нагружать проц
}
return

esc:: ; аварийный выход, можно убрать
exitapp

2) Немного изменил добавление хоткеев, попробуй может глюк пропадет... кстати, с tooltip вместо RButton этот глюк тоже есть?
Такой проблемы не смог воспроизвести у себя, возможно программа так странно реагирует; возможно поможет увеличение задержи между посылами RButton; возможно стоит попробовать более старую версию AHK.

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

18 (изменено: Hollisch, 2016-01-22 16:57:47)

Re: AHK: Остановка цикла при нажатии на любые клавиши кроме определенных

Alectric
1) Спасибо.

2) Дело было не в бобине...

Изначально, я все это проверял, как реагирует приложение на столько частый посыл ПКМ, с ctrl и без него, но по всей видимости, в этот момент я где-то ошибся, возможно запустил не тот скрипт и решил, что все хорошо. 
Всему виной само приложение, даже с обычным лупом из первого поста и sleep 100 (да и любым другим) клавиша ctrl срабатывает с задержкой, через пол-секунды после нажатия.
Самое интересное, что в самом приложение есть подобная штука - повтор ПКМ, (выдает примерно 20 нажатий в секунду) и оно нормально дружит с ctrl... но его недостаток как раз в том, что цикл не прерывается при нажатии на qweasd.
Так что выходит - я просил найти ошибку которой нет, прошу прощения.

Пошел другим путем и на примере вашего скрипта сделал так:

SetFormat,IntegerFast,h ; устанавливаем формат чисел в HEX

; исключения
except=0x11`,0x1`,0x2`,0x4`,0x5`,0x6`,0x51`,0x57`,0x45`,0x41`,0x53`,0x44

Global CtrlActivate

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

; перечисляем дополнительные клавиши, которые, почему-то, не добавляются по вирткоду, туда же
Hotkey,~*del,Label,On
Hotkey,~*up,Label,On
Hotkey,~*Down,Label,On
Hotkey,~*left,Label,On
Hotkey,~*right,Label,On
Hotkey,~*ins,Label,On
Hotkey,~*home,Label,On
Hotkey,~*end,Label,On
Hotkey,~*pgup,Label,On
Hotkey,~*pgdn,Label,On

Label: ; тут все понятно, думаю
AnyKey=1
return

; делаем нужные клавиши "однокликовыми"(одно зажатие - один посыл), как ты описывал
$vk51::
$vk57::
$vk45::
$vk41::
$vk53::
$vk44::
k:=regexreplace(a_thishotkey,"\$")
send,{%k% down}
keywait,%k%,L ; ждем отпускания
return

$vk51 up::
$vk57 up::
$vk45 up::
$vk41 up::
$vk53 up::
$vk44 up::
k:=regexreplace(a_thishotkey,"\$")
send,{%k%}
return

*$Rbutton::
AnyKey=0 ; обнуляем переменную ("либо ПКМ, новое нажатие на которую возобновляет цикл")
while GetKeyState("RButton","P") ; пока зажата кнопка - цикл работает
{
  if AnyKey ; если в AnyKey единица
  {
    if GetKeyState("LButton","P")
    {
      sleep,390
      AnyKey=0
    }
    sleep,10 ; спим чтобы не нагружать проц
    continue ; продолжаем, не выполняя последующие строки
  }
  if CtrlActivate
  {
  Send,{LCtrl Down}{RButton}
  }
  else 
  {
  Send, {RButton} ; посылаем нажатие
  }
;  tooltip,% A_Index ; для отладки
  Sleep, 15 ; спим чтобы не нагружать проц
}
return

esc:: ; аварийный выход, можно убрать
exitapp

*$LCtrl::
 CtrlActivate=1
return

*$LCtrl Up::
 Send,{LCtrl Up}
 CtrlActivate=0
return

Теперь все работает как надо, но осталось пара вопросов:
1) Хотелось бы полностью сделать через виртуальные коды, но с ctrl у меня недопонимание, как лучше его обозначаеть vka2 или vk11, и в чем разница между ними? (Срабатывают то оба, если просто сделать 2 скрипта с тултипами на этих хоткеях и нажать ctrl)

2) Насчет алгоритма, а именно:

  if AnyKey
      ....
  if CtrlActivate
      ....

Как бы это банально не прозвучало, но - так нормально? Или можно более "разумно" расположить мое условие? (  if CtrlActivate=1 )

19 (изменено: Alectric, 2016-01-22 17:21:10)

Re: AHK: Остановка цикла при нажатии на любые клавиши кроме определенных

Hollisch пишет:

полностью сделать через виртуальные коды

Зачем...

Hollisch пишет:

так нормально? Или...

Если работает как надо и без глюков, то вполне нормально.

Теперь можно заняться сокращением:

  if CtrlActivate
  {
  Send,{LCtrl Down}{RButton}
  }
  else 
  {
  Send, {RButton} ; посылаем нажатие
  }

->

  if CtrlActivate
    Send,{LCtrl Down}{RButton}
  else 
    Send, {RButton} ; посылаем нажатие
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.