1

Тема: Преобразование макроса в ahk

Прошу помощи у опытных пользователей ahk. Есть макрос, выглядит он примерно так:

Нажать "a"
Отжать "а"
Ждать 730мс
Нажать "а"
Отжать "а"
Ждать 650мс
Нажать "а"
Отжать "а"
Ждать 650мс
Нажать "а"
Отжать "а"
Ждать 650мс

Свойства этого макроса: Циклический, воспроизводится, когда нажата клавиша(когда клавиша отжимается - перестает производиться).


Почитав в интернете о возможностях ahk, я выработал примерный алгоритм:

Для кнопки "x"
1. Начало
2. Если кнопка "х" зажата, то перейти к след. действию. Если нет, то перейти к пункту 1.
3. Зажать "а", отжать "а"
4. Ждать 730мс
5. Если кнопка "х" зажата, то перейти к след. действию. Если нет, то перейти к пункту 1.
6. Зажать "а", отжать "а"
7. Ждать 650мс
8. Если кнопка "х" зажата, то перейти к след. действию. Если нет, то перейти к пункту 1.
9. Зажать "а", отжать "а"
10. Ждать 650мс
11. Если кнопка "х" зажата, то перейти к след. действию. Если нет, то перейти к пункту 1.
12. Зажать "а", отжать "а"
13. Ждать 650мс
14. Если кнопка "х" зажата, то перейти к пункту 3. Если нет, то перейти к пункту 1.

Все это нужно преобразовать в язык ahk. Я не предлагаю делать за меня всю работу. Дайте пожалуйста нужное направление, тыкните куда-нибудь носом, чтобы на основе "ЭТОГО" я смог преобразовать этот макрос.
Большое спасибо заранее.

2 (изменено: Indomito, 2016-12-01 07:42:39)

Re: Преобразование макроса в ahk

pse.hard
Приветствую.

+ Я бы так не стал писать, хотя и можно.

Нажать "a"
Отжать "а"
Ждать 730мс
Нажать "а"
Отжать "а"
Ждать 650мс
Нажать "а"
Отжать "а"
Ждать 650мс
Нажать "а"
Отжать "а"
Ждать 650мс

+ Я бы написал приблизительно так.
  Send, {a Down}
    KeyWait, % A_ThisHotkey
  Send, {a Up}
  Sleep 730
; И т.д. 

По твоему аналогу, вот такое решение.
Шаг №14 Не нужен, он делается вначале "бесконечного" LOOP.

Loop
  {
    If (!GetKeyState("x", "P"))
      Break
    Send, {a Down}
      KeyWait, % A_ThisHotkey
    Send, {a Up}
      Sleep 730
    
    If (!GetKeyState("x", "P"))
      Break
    Send, {a Down}
      KeyWait, % A_ThisHotkey
    Send, {a Up}
      Sleep 650
;И так до конца.
  }
"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

3

Re: Преобразование макроса в ahk

Indomito, большое вам спасибо, все работает, я доволен. :3

4 (изменено: Indomito, 2016-12-03 01:28:34)

Re: Преобразование макроса в ahk

pse.hard
Это хорошо но надо поправить немного - заменить просто буквы на vk или sc коды.

Клавиша "x" - vk58 или sc2D
Клавиша "a" - vk41 или sc1E


Пример.

Loop
If (GetKeyState("vk58", "P"))
  MsgBox, нажали на "x" в любой раскладке
+ Исправленный код
;Скрипт не выгружается до явного определения
#Persistent
;Запрет повторного запуска
#SingleInstance  Force
;Точка выхода
OnExit, lEnd_Test

Loop
  {
    If (!GetKeyState("vk58", "P"))
      Break
    Send, {vk41 Down}
      KeyWait, % A_ThisHotkey
    Send, {vk41 Up}
      Sleep 730
   Loop 4 
    {
     If (!GetKeyState("vk58", "P"))
      Break
    Send, {vk41 Down}
      KeyWait, % A_ThisHotkey
    Send, {vk41 Up}
    Sleep 650
    }
  }
Return

LCtrl & LWin::
LWin & LCtrl::
lEnd_Test:
  ExitApp
"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download