1 (изменено: ypppu, 2012-04-18 19:39:29)

Тема: AHK: Как послать многократное нажатие клавиши при её удержании

Доброго времени суток. Подскажите пожалуйста, в чем проблема. Запускаю следующий скрипт:

A::
   Loop
      {
         Send, {A}
         Sleep, 250
         Send, {A}
         Sleep, 250
         If GetKeyState("A", "P") = 0
            Break
      }
   Return

Но при нажатии на А ничего не происходит. Я хотел чтобы скрипт при нажатой клавише имитировал постоянное многократное нажатие. Вот что выдала программа:

033: Return (3.58)
034: Loop
036: Send,{A} (0.02)
037: Sleep,250 (0.25)
038: Send,{A} (0.02)
039: Sleep,250 (0.25)
040: if GetKeyState("A", "P") = 0 
042: }
036: Send,{A} (0.01)
037: Sleep,250 (0.25)
038: Send,{A} (0.02)
039: Sleep,250 (0.25)
040: if GetKeyState("A", "P") = 0 
041: Break
043: Return (0.61)
034: Loop
036: Send,{A} (0.02)
037: Sleep,250 (0.25)
038: Send,{A} (0.02)
039: Sleep,250 (0.25)
040: if GetKeyState("A", "P") = 0 
041: Break
043: Return (5.89)

Потом попробовал вот так:

A:: Send, {A}
   Return

тоже безрезультатно - ничего не происходит.

033: Return (3.84)
033: Send,{A} (0.01)
033: Return (0.86)
033: Send,{A} (0.01)
033: Return (7.86)
033: Send,{A} (0.01)
033: Return (0.58)
033: Send,{A} (0.02)
033: Return (0.34)

Объясните пожалуйста что я не так делаю. Может это из-за Win7?

Название темы вроде "AHK: Не работает скрипт" ни о чём не говорит и затрудняет поиск.

2 (изменено: Indomito, 2012-04-16 16:56:30)

Re: AHK: Как послать многократное нажатие клавиши при её удержании

Надо не Send, {A} а так

   Send, {A Down}
   KeyWait, % A_ThisHotkey
   Send, {A Up}

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

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

3 (изменено: creature.ws, 2012-04-16 17:22:32)

Re: AHK: Как послать многократное нажатие клавиши при её удержании

Но при нажатии на А ничего не происходит.

Если нажатие А приводит к отправке нажатий А, то отправленные нажатия приведут к отправке нажатий А которые, в свою очередь, приведут… (продолжать цепочку до  тех пор пока А не перестанут отправляться )
Специально для обеспечения работоспособности подобных горячих клавиш существует префикс  $

$A::
   Loop
      {
         Send, {A}
         Sleep, 250
         If GetKeyState("A", "P") = 0
            Break
      }
   Return

4

Re: AHK: Как послать многократное нажатие клавиши при её удержании

Проблема в том что с любой командой Loop или Send при нажатии этой клавиши ничего не происходит. Другие клавиши работают нормально.

5

Re: AHK: Как послать многократное нажатие клавиши при её удержании

А причём тут Loop или Send?

6

Re: AHK: Как послать многократное нажатие клавиши при её удержании

creature.ws пишет:

А причём тут Loop или Send?

я думаю дело в виртуальных кодах клавиш.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

7

Re: AHK: Как послать многократное нажатие клавиши при её удержании

Indomito пишет:
creature.ws пишет:

А причём тут Loop или Send?

я думаю дело в виртуальных кодах клавиш.

И что это значит?

8

Re: AHK: Как послать многократное нажатие клавиши при её удержании

Значит предполагаемые различные языки ввода для различных окон

*$vk41::
   Loop
      {
         Send, {vk41}
         Sleep, 250
         If GetKeyState("vk41", "P") = 0
            Break
      }
   Return

9 (изменено: Indomito, 2012-04-16 21:10:42)

Re: AHK: Как послать многократное нажатие клавиши при её удержании

Gusto пишет:

И что это значит?

AutoHotkey: Начинающему разработчику - Печатаю виртуальными кодами и ещё   Виртуальные коды клавиш

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

10

Re: AHK: Как послать многократное нажатие клавиши при её удержании

Та же песня. Нажимаю А - никакой реакции. Ума не приложу что не так.

11 (изменено: Indomito, 2012-04-16 21:44:19)

Re: AHK: Как послать многократное нажатие клавиши при её удержании

Gusto пишет:

Та же песня. Нажимаю А - никакой реакции. Ума не приложу что не так.

на

onA:
hotkey a,test, on
return

test:
hotkey a,test, off
 loop 30
 send {a down}
 send {a up}
goto onA

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

P.S. У меня работает на 100%... "Проверено - мин нет"

Да, по правильному надо так

onA:
hotkey a,test, on
return

test:
hotkey a,test, off
 loop 30
 send {a down}
 send {a up}
Gosub onA
"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

12 (изменено: Indomito, 2012-04-16 22:25:59)

Re: AHK: Как послать многократное нажатие клавиши при её удержании

Она просто печатает 30 раз "а", ну а остальное дело техники
Ели учесть пожелание

Я хотел чтобы скрипт при нажатой клавише имитировал постоянное многократное нажатие.

то можно написать так

onA:
hotkey a,test, on
return

test:
hotkey a,test, off
 ;loop 30
 sleep 250
 send {a down}
 send {a up}
 sleep 250
 if GetKeyState(a, p)
    {
     hotkey a,test, off
     send {a up}
     return
    }
Gosub onA

только я особого смысла не вижу

OFF: Рекурсия страшная сила LOL

А можно ещё и так

onA:
hotkey a,test, on
return

test:
hotkey a,test, off
 ;loop 30
 sleep 100
 send {a down}
 sleep 10
 if GetKeyState(a, p)
    {
     hotkey a,test, off
    send {a up} 
    return
    }
sleep 10
 send {a up}
 sleep 100
Gosub onA

А для самопроверки так

onA:
hotkey a,test, on
return
 
test:
hotkey a,test, off
 ;loop 30
 sleep 100
 loop 10
 send {a down}
 sleep 10
 if GetKeyState(a, p)
    {
     hotkey a,test, off
     send {a up}
     return
    }
sleep 10
 send {a up}
 sleep 100
Gosub onA

Я специально использовал send {a down} и send {a up} что исключить вмешательство "автоповторялки" Windows

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

13 (изменено: ypppu, 2012-04-18 19:32:54)

Re: AHK: Как послать многократное нажатие клавиши при её удержании

Indomito, твой скрипт работает, только после нажатия есть непонятная задержка. И еще, мне этот скрипт нужен для игры, но в ней он не работает(работает как одиночное нажатие). Игра Ragnarok. Нашел тему где для нее писали скрипты, но мало чего понял.Линк: http://forum.script-coding.com/viewtopic.php?id=5926
И что такое PID?

Ссылки оформляются кодом url

14

Re: AHK: Как послать многократное нажатие клавиши при её удержании

Если мало поняли в русскоязычной теме, то предлагать для ознакомления ссылку на тему официального англоязычного форума не буду.
Большинство онлайн игр, упомянутый рагнарок в частности, препятствуют использованию AHK.
Суть: не работает в онлайн-игре — так и должно быть, расслабьтесь и играйте честно

15

Re: AHK: Как послать многократное нажатие клавиши при её удержании

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

16

Re: AHK: Как послать многократное нажатие клавиши при её удержании

А разве уместно сравнивать мыши с тройным кликом производимым «устройством» и программы «эмулирующие клики»?
Вот вам, разбирайтесь

17

Re: AHK: Как послать многократное нажатие клавиши при её удержании

Gusto пишет:

Indomito, твой скрипт работает, только после нажатия есть непонятная задержка. И еще, мне этот скрипт нужен для игры, но в ней он не работает(работает как одиночное нажатие). Игра Ragnarok. Нашел тему где для нее писали скрипты, но мало чего понял.Линк: http://forum.script-coding.com/viewtopic.php?id=5926
И что такое PID?

Так по пунктам.
1. Про задержку скажу - я сам её написал, т.к. не знал вообще для чего я пишу
2. По линку всё весьма прозрачно.
3. PID - вам лень заглянуть в Википедию что ли? Process ID — идентификатор процесса

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro